
Hy Pythonista!我很高興從我的話語中向您展示pyoload :
運行時期間,用於函數參數和類屬性的擴展和遞歸類型檢查和鑄造的Python模塊
在這裡,我們使用Python提供的一些美麗而乾淨的功能,包括裝飾人員和描述符,以幫助您在運行時輸入檢查
這是一些簡單的用法示例,可以填寫此PYPI頁面。
該裝飾函數使用inspect.signature的力量。簽名來檢查函數傳遞給該函數的參數,並支持默認值,通用的aliarse和註釋,從而添加了更多註釋類型,以便於方便,降低了一些代碼。
from pyoload import *
@ annotate
def foo (
a : str , # this has an annotation
b = 3 , # this uses a default value
c : int = 0 # here both
) -> tuple [ str , int ]: # The return type
... from pyoload import *
@ annotate
def foo (
b = dict [ str | int , float ], # here a GenericAlias
c : Cast ( list [ int ]) = '12345' # here a recursive cast
): # No return type
...這使用與註釋相同的原理,但允許多次調度功能(又稱運行時過載?)。
from pyoload import *
@ multimethod
def foo ( a , b ):
print ( "two arguments" )
@ multimethod
def foo ( a : Values (( 1 , 2 , 3 ))):
print ( 'either 1, 2 or 3' )
@ foo . overload
def _ ( a : Any ):
raise ValueError ()這些是Pyoload添加的標準註釋:
筆記
添加的註釋仍然與標準類型不可合併。
pyoload.Values一個簡單的tuple組子類,將其用作註釋,它將僅驗證隨附的值。
@ annotate
def foo ( bar : Values ( range ( 5 ))):
...pyoload.Cast這將經過的參數對指定類型進行了遞歸鑄造,它支持dict通用別名,如dict[str, int | str]並嘗試按指定順序進行鑄造。
@ annotate
def foo ( bar : Cast ( tuple [ int | str ])):
print ( bar )
foo (( 3 , "3" )) # (3, 3)
foo (( 3j , " " )) # ('3j', ' ')pyoload.Checks允許您使用自定義檢查器方法,例如
from pyoload import *
test = lambda val : True # put your check here
def foo ( a : Checks ( func = test ):
...如果檢查名稱用_備份,則將被否定,如果失敗,則會提高例外。您可以使用Check.register自己註冊自己的支票
@ Check . register ( 'mycheck' )
def _ ( param , value ):
print ( param , value )
Checks ( mycheck = 'param' )( 'val' ) # Will raise error on check failure
@ annotate
def foo ( a : Checks ( mycheck = 'param' )):
...檢查可以用作註釋;使用pyoload.Checks稱為Checks(foo=bar)(val) ;或使用pyoload.Checks直接調用: Check.check(name, param, arg)
接收作為參數的整數值指定了應找到長度的預期長度或切片
比較刨絲器,比從參數到值少,少於和水。
使用函數進行驗證,該函數可以返回布爾值或引起錯誤。它可以直接作為位置參數傳遞給Pyoload.Checks as: Checks(func1, func2, foo=bar, foo2=bar2)
CheckedAttr和CastedAttr是簡單的描述符,將執行鑄造或檢查分配。
from pyoload import *
class address :
number = CastedAttr ( tuple [ int ])
在分配中檢查或施放值
筆記
如果尚未初始化,該屬性將None返回