
هاي بيثونستا! يسعدني أن أقدم لكم pyoload ، كما هو الحال من كلماتي:
وحدة بيثون لفحص النوع الممتد والمتكرر وتلقي وسيطات الوظائف وسمات الفصل أثناء وقت التشغيل
هنا نستخدم بعض الميزات الجميلة والنظيفة التي تقدمها Python ، بما في ذلك الديكورات والواصف لمساعدتك على الكتابة أثناء وقت التشغيل
فيما يلي بعض أمثلة الاستخدام البسيطة لملء صفحة PYPI هذه.
تستخدم وظيفة الديكور هذه قوة inspect.signature
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)
يتلقى كوسيطة قيمة عدد صحيح تحدد الطول المتوقع أو شريحة يجب فيها العثور على الطول
يقارن المبشر من ، أقل من و aqual من المعلمة إلى القيمة.
يستخدم وظيفة للتحقق من الصحة ، يمكن أن تعيد الوظيفة المنطقية أو رفع خطأ. يمكن تمريره مباشرة كحجيل موضعي إلى pyoload.checks على النحو التالي: Checks(func1, func2, foo=bar, foo2=bar2)
CheckedAttr و CastedAttr ، هي واصفات بسيطة ستؤدي الصب أو الشيكات في المهمة.
from pyoload import *
class address :
number = CastedAttr ( tuple [ int ])
يتم فحص القيم أو إلقاؤها في المهمة
ملحوظة
سترجع السمات None إذا لم يتم تهيئتها بعد