1.函數定義的弊端
- python是動態語言,變量隨時能夠被賦值,且能賦值爲不一樣的類型,動態語言很靈活,可是這種特性也是弊端;
- 難發現:因爲不作任何類型檢查,直到運行期問題才顯現出來,或者線上運行時才能暴露出問 題 ;
- 難使用:函數的使用者看到函數的時候,並不知道你的函數的設計,並不知道應該傳入什麼類 型的數據;
- 解決辦法:能夠經過增長文檔Documentation String(幫助文檔)和使用函數參數註解兩種辦法來解決這個弊端;
2.什麼是參數註解
def show(x: int, y: int) -> int:
'''
:param x:
:param y:
:return:
'''
return x * y
print(show(10,20)) # 200
- 函數中間使用 ''' '''包裹起來的註釋說明就是參數註解;
3.使用參數註解的好處
- 參數註解能夠避免動態語音的弊端;
- 能夠對函數的參數進行類型註解和對函數的返回值進行類型註解;
- 參數註解只對函數參數作一個輔助的說明,並不對函數參數進行類型檢查;
4.Functools模塊的使用
# 示例1
import inspect
def add(x:int, y:int, *args,**kwargs) -> int:
return x + y
sig = inspect.signature(add)
print(sig) # (x: int, y: int, *args, **kwargs) -> int
print(sig.parameters) # OrderedDict([('x', <Parameter "x: int">), ('y', <Parameter "y: int">), ('args', <Parameter "*args">), ('kwargs', <Parameter "**kwargs">)])
# 示例2: partial偏函數
from functools import partial
def add(x, y):
return x + y
partial_add = partial(add, x=1)
result = partial_add(y=2)
print(result) #輸出: 3
# lru_cache
from functools import lru_cache
import time
@lru_cache()
def add(x, y):
time.sleep(10)
return x + y
print(add(1,2))
print(add(2,3))
print(add(2,3))
print(add(2,3))
- 指那些做用於函數或者返回其它函數的函數,一般只要是能夠被當作函數調用的對象就是這個模塊的目標;
- lru_cache裝飾器的做用就是把計算結果保存在內存中,下一次有同一個參數傳入的話就不會再次進行計算;
參考:https://www.9xkd.com/user/pla...html