python是一門動態語言,因此在呼叫函式的時候,可以傳入任何型別的資料,而他又是一門強型別語言,當傳入的引數不合法時,便會在內部報錯。
為了減少這一錯誤的發生,python從3.5開始引入了函式註解,如下所示:
def fn(x:int, y:int):
pass
配合inspect模組,可以有效的檢查傳入函式是否合法
首先,通過sig=inpect.signature(fn),可以獲取到fn函式的引數,然後通過sig.parameters得到乙個引數的ordereddict,當呼叫函式fn時,通過獲取函式呼叫時傳入的引數,來判斷是否符合有序字典中相應的引數型別。
在此,可以把該方法包裝成乙個check裝飾器,具體**實現大致如下:
import inspect,functools
def check(fn):
sig = inspect.signature(fn) #獲取函式引數型別
params = sig.parameters #有序字典
values = list(params.values())
for i,v in enumerate(args): #獲取函式呼叫時的值
if values[i].annotation is inspect._empty or isinstance(v, values[i].annotation): #如果函式註解為空或者輸入的值符合函式註解時pass,否則提示引數錯誤
pass
else:
print('wrong param')
return
for k, v in kwargs.items():
if params[k].annotation is inspect._empty or isinstance(v, params[k].annotation):
pass
else:
print('wrong param')
return
x = fn(*args,**kwargs)
return x
檢查郵箱合法性
1 標準的c和c 都不支援正規表示式,但有一些函式庫可以輔助c c 程式設計師完成這一功能,其中最著名的當數philip hazel的perl compatible regular expression庫,許多linux發行版本都帶有這個函式庫。2 c c 中使用正規表示式一般分為三步 1 編譯正規...
檢查 URL 合法性
方法一 自己總結,親測可用 public static boolean checkurl string url 0 9 1 9 0 9 1 9 25 0 5 2 0 4 0 9 0 1 0 9 1 9 0 9 1 9 0 25 0 5 2 0 4 0 9 0 1 0 9 1 9 0 9 1 9 0 ...
JAVA日期合法性檢查
日期檢查 param pinput 要檢查的字串 return boolean 檢查結果 public static boolean isdate string pinput string regex d 02468 048 13579 26 0?1357 8 1 02 0?1 9 1 2 0 9 ...