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 否指定引數是否必須繫結 ...