क्या इनपुट पैरामीटर घोषित करने के लिए पायथन 3 सिंटैक्स का उपयोग करना संभव है और रिटर्न वैल्यू प्रकार उन प्रकारों को निर्धारित करते हैं? इसी प्रकार किसी फ़ंक्शन के पैरामीटर की संख्या निर्धारित करने के लिए?

def foo(name: str) -> int:
    ....

मैं क्रमशः str और int प्राप्त करना चाहता हूं।

4
user2146414 29 मार्च 2018, 19:29

3 जवाब

सबसे बढ़िया उत्तर

इसके लिए typing मॉड्यूल में एक सुविधा कार्य है:

>>> import typing
>>> typing.get_type_hints(foo)
{'name': <class 'str'>, 'return': <class 'int'>}

(दस्तावेज़ीकरण)

यह foo.__annotations__ से अलग है जिसमें get_type_hints उदाहरण के लिए स्ट्रिंग में संग्रहीत अग्रेषित संदर्भ और अन्य एनोटेशन को हल कर सकता है

>>> def foo(name: 'foo') -> 'int':
...     ...
... 
>>> foo.__annotations__
{'name': 'foo', 'return': 'int'}
>>> typing.get_type_hints(foo)
{'name': <function foo at 0x7f4c9cacb268>, 'return': <class 'int'>}

यह पायथन 4.0 में विशेष रूप से उपयोगी होगा, क्योंकि तब सभी एनोटेशन स्ट्रिंग रूप में संग्रहीत किया जाएगा

15
vaultah 29 मार्च 2018, 19:34
def foo(name: str) -> int:
    pass

foo.__annotations__
# {'name': <class 'str'>, 'return': <class 'int'>}

foo.__annotations__['return'].__name__
# 'int'
1
Alex Hall 29 मार्च 2018, 16:33

inspect का उपयोग किया जा सकता है:

>>> def foo(name: str) -> int:
...     return 0
>>> 
>>> import inspect
>>> 
>>> sig = inspect.signature(foo)
>>> [p.annotation for p in sig.parameters.values()]
[<class 'str'>]
>>> sig.return_annotation
<class 'int'>

@ वॉल्टाह की विधि हालांकि और भी सुविधाजनक लगती है।

2
Paul Panzer 29 मार्च 2018, 16:39