首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Python 進階特性實戰指南:可變參數、glob、調試、UUID、序列化、壓縮、atexit

     編輯:Java 相關知識

1. 可變參數函數


def foo(*args):
    print("Number of arguments:", len(args))
    for i, x in enumerate(args):
        print(f"Argument {i}: {x}")

foo()                    # 0
foo("hello")             # 1: hello
foo("hello", "world")    # 2: hello, world

*args 收集位置參數為元組;**kwargs 收集關鍵字參數為字典。

2. glob 文件模式匹配


import glob
# 獲取所有 .py 文件
files = glob.glob('*.py')
# 多模式
import itertools
def multi_glob(*patterns):
    return itertools.chain.from_iterable(glob.glob(p) for p in patterns)

for f in multi_glob("*.txt", "*.py"):
    print(f)

配合 os.path.realpath 獲取絕對路徑。

3. 調試利器:inspect + logging


import logging, inspect
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(filename)s:%(lineno)d: %(message)s')

def debug_info():
    frame = inspect.currentframe().f_back
    print(frame.f_code.co_filename, frame.f_lineno, frame.f_code.co_name)

logging.info("Application started")
debug_info()

inspect.getouterframes() 可獲取完整調用棧,適合構建自定義日誌上下文。

4. 生成唯一 ID:uuid 模組


import uuid
uid = uuid.uuid1()  # 基於時間+MAC
print(uid)          # 9e177ec0-65b6-11e3-b2d0-e4d53dfcf61b
# 去連字號
print(str(uid).replace('-', ''))
# 隨機 UUID (v4)
print(uuid.uuid4())

注意:`uuid1()` 尾部相似因包含 MAC 地址;高安全場景用 `uuid4()` 或加密雜湊。

5. 序列化:pickle vs json


import pickle, json
data = ['hello', 42, [1, 'two'], 'apple']

# pickle (Python 專用,支援任意對象)
pickled = pickle.dumps(data)
restored = pickle.loads(pickled)

# json (跨語言,僅基本類型)
json_str = json.dumps(data)
restored2 = json.loads(json_str)  # 列表變為 Unicode 字符串

複雜對象用 pickle;API 交互、配置文件用 json。

6. 字符串壓縮:zlib


import zlib
text = "Lorem ipsum " * 100
compressed = zlib.compress(text.encode())
print("Original:", len(text), "Compressed:", len(compressed))
decompressed = zlib.decompress(compressed).decode()
assert decompressed == text

無需臨時文件,內存級壓縮,適合網絡傳輸、緩存大文本。

7. 註冊關閉鉤子:atexit


import atexit, time
start = time.time()

def report():
    print(f"Runtime: {time.time() - start:.2f}s")

atexit.register(report)
# 程序正常退出、異常退出、sys.exit() 皆會執行
# 不會執行:os._exit()、SIGKILL、解釋器崩潰

優於在腳本末尾寫代碼:即使拋出未捕獲異常也會執行。

8. HMAC 與雜湊(補充)


import hmac, hashlib
key = b'secret'
msg = b'message'
print(hmac.new(key, msg, hashlib.sha256).hexdigest())

m = hashlib.sha1()
m.update(b"The quick brown fox jumps over the lazy dog")
print(m.hexdigest())

用於 API 簽名、完整性校驗。

總結

特性模組/語法典型場景
可變參數*args, **kwargs裝飾器、代理函數、CLI 工具
文件匹配glob批量處理、構建腳本
調試檢測inspect動態日誌、測試框架
唯一 IDuuid分布式追蹤、臨時文件名
序列化pickle / json對象持久化 / API 交互
壓縮zlib網絡傳輸、緩存優化
關閉鉤子atexit資源清理、指標上報
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved