Day22:引數註解

書和咖啡發表於2019-02-22

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裝飾器的作用就是把計算結果儲存在記憶體中,下一次有同一個引數傳入的話就不會再次進行計算;

相關文章