ये PEP 3107 में शामिल फ़ंक्शन एनोटेशन हैं। विशेष रूप से, ->
रिटर्न फ़ंक्शन एनोटेशन को चिह्नित करता है।
उदाहरण:
>>> '{:,} {}'.format(kinetic_energy(20,3000),
kinetic_energy.__annotations__['return'])
'90,000,000.0 Joules'
तुम भी एक अजगर डेटा संरचना हो सकता है के बजाय सिर्फ एक स्ट्रिंग:
>>> rd={'type':float,'units':'Joules','docstring':'Given mass and velocity returns kinetic energy in Joules'}
>>> def f()->rd:
... pass
>>> f.__annotations__['return']['type']
<class 'float'>
>>> f.__annotations__['return']['units']
'Joules'
>>> f.__annotations__['return']['docstring']
'Given mass and velocity returns kinetic energy in Joules'
>>> def kinetic_energy(m:'in KG', v:'in M/S')->'Joules':
... return 1/2*m*v**2
...
>>> kinetic_energy.__annotations__
{'return': 'Joules', 'v': 'in M/S', 'm': 'in KG'}
एनोटेशन शब्दकोशों हैं, तो आप ऐसा कर सकते हैं तो
या, आप कॉल किए गए मानों को सत्यापित करने के लिए फ़ंक्शन विशेषताओं का उपयोग कर सकते हैं:
def validate(func, locals):
for var, test in func.__annotations__.items():
value = locals[var]
try:
pr=test.__name__+': '+test.__docstring__
except AttributeError:
pr=test.__name__
msg = '{}=={}; Test: {}'.format(var, value, pr)
assert test(value), msg
def between(lo, hi):
def _between(x):
return lo <= x <= hi
_between.__docstring__='must be between {} and {}'.format(lo,hi)
return _between
def f(x: between(3,10), y:lambda _y: isinstance(_y,int)):
validate(f, locals())
print(x,y)
प्रिंटों
>>> f(2,2)
AssertionError: x==2; Test: _between: must be between 3 and 10
>>> f(3,2.1)
AssertionError: y==2.1; Test: <lambda>
और जानकारी '.__ एनोटेशन__' विशेषता के रूप में उपलब्ध है। –
वाह, मुझे ज्ञान का एक व्यापक क्षेत्र याद आया - न केवल मूल्य एनोटेशन लौटाता है, बल्कि पैरामीटर एनोटेशन भी देता है। आपका बहुत बहुत धन्यवाद :)। – Krotton
@ कपास इसे याद करने के लिए आपको दोष नहीं दे सकता है, यह व्यावहारिक रूप से अप्रयुक्त है। मैंने कभी भी उनका उपयोग करके एक ही पुस्तकालय से मुलाकात की, और यह काफी अस्पष्ट है। – delnan