functools.lru_cache 優化重複計算
它可以幫你把函數的運算結果暫存起來,避免重複計算。
import functools
@functools.lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(50)) # 計算速度大幅提升
使用這個裝飾器後,重複計算的部分會自動被快取起來。
asyncio 非同步程式設計
非同步程式可以同時處理多個任務,提升效率。
import asyncio
async def print_delayed(message, delay):
await asyncio.sleep(delay)
print(message)
async def main():
await asyncio.gather(
print_delayed("First", 1),
print_delayed("Second", 2),
print_delayed("Third", 3),
)
asyncio.run(main())
async 和 await 關鍵字讓你可以寫出非同步的代碼,處理多個任務時不用等待每個任務完成後才執行下一個。
星號運算符 (Star Operator)
星號 * 可以在多種情況下使用,比如將列表的元素作為函數參數,或者用來接收多個參數。
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3, 4)) # 輸出 10
這讓函數更靈活,能處理不確定數量的參數。
any() 和 all() 函數
any() 和 all() 是非常實用的內建函數,用來判斷序列中的元素是否符合條件。
numbers = [1, 2, 3, 4]
print(any(x > 3 for x in numbers)) # True, 因為有元素大於 3
print(all(x > 0 for x in numbers)) # True, 因為所有元素都大於 0
any() 只要有一個元素為真就返回 True,all() 則要求所有元素都為真。