函式引數註解

2021-09-19 16:06:38 字數 2223 閱讀 1243

python是動態語言,變數隨時可以被賦值,且能賦值為不同的另外型別

python不是靜態編譯型語言,變數型別是在執行期決定的

動態語言很靈活,但是這種特性也是弊端

def add(x,y):

return x+y

print(add(4,5)) #9

print(add("hello","word")) # "helloword"

難發現:由於不做任何型別檢查,直到執行期問題才顯現出來,或者線上執行時才能暴露處問題

難使用:函式的使用者看到函式的時候,並不知道你的函式的設計,並不知道應該傳入什麼型別的資料

def add(x:int,y:int)->int:

''':param x:int

:param y:int

:return: int

''' return x+y

函式註解function annotations

add.__annotations__

變數註解python3.6引入 它也只是一種對變數的說明,非強制 i:int = 3

業務應用

函式引數型別檢查思路

inspect模組

提供獲取物件資訊的函式,可以檢查函式和類 型別檢查

signature(callable),獲取簽名(函式簽名包含了乙個函式的資訊,包含函式名,它的引數型別,他所在的類和命名空間及其他資訊)

import inspect

def add(x:int,y:int,*args,**keargs)->int:

return x+y

sig = inspect.signature(add)

print(sig,type(sig)) #函式簽名

print(sig.parameters['x'])

inspect.isfunction(add),是否是函式

inspect.ismethod(add),是否是類的方法

還有很多is函式,需要的時候查閱inspect模組幫助

parameter物件

import inspect

def add(x,y:int=6 ,*args,z,t=10,**kwargs):

return x+y

sig = inspect.signature(add)

print(sig)

print('params : ',sig.parameters) #有序字典

print('return :',sig.return_annotation)

for i,item in enumerate(sig.parameters.items()):

name,param = item

print(i+1,name,param.annotation,param.kind,param.default)

print(param.default is param.empty,end = '\n')

import inspect

def check(fn):

sig = inspect.signature(fn)

params = sig.parameters

values = list(params.values())

for i,p in enumerate(args):

param = values[i]

if param.annotation is not inspect._empty and not isinstance(p,param.annotation):

print(p,'!==',values[i].annotation)

for k,v in kwargs.items():

if params[k].annotation is not inspect._empty and not isinstance(v,params[k].annotation):

print(k,v,'!====',params[k].annotation)

return fn(*args,**kwargs)

@check

def add(x,y:int=7)->int:

return x+y

print(add(10,5))

Retrofit引數註解

初始化retrofit string base url retrofit retrofit new retrofit.builder baseurl base url build 樣式1 乙個簡單的get請求 news get news callgetitem 樣式2 url中有引數 news 1 ...

註解引數獲取不到 SpringMVC註解開發

一 註解開發springmvc 3.註解開發需要在springmvc的配置檔案內設定註解掃瞄器和註冊伺服器 訪問的路徑是專案名 控制器的命名空間 方法的具體訪問路徑 scrop註解表示作用域一般設定取原型模式預設是單態模式 方法體 controller public class myhandler ...

Spring MVC引數繫結註解

requestparam註解用於將指定的請求引數賦值給方法中的形參。requestparam註解可以使用的屬性如表所示。屬性名稱 型別是否必填 描述name string 否請求指定頭繫結的名稱 value string 否name屬性的別名 required string 否指定引數是否必須繫結 ...