मेरे पास अजगर में एक फ़ंक्शन है जो या तो वापस आ सकता है bool
या ए list
। क्या प्रकार के संकेतों का उपयोग करके रिटर्न प्रकार निर्दिष्ट करने का एक तरीका है।
उदाहरण के लिए, क्या यह करने का सही तरीका है?
def foo(id) -> list or bool:
...
मेरे पास अजगर में एक फ़ंक्शन है जो या तो वापस आ सकता है bool
या ए list
। क्या प्रकार के संकेतों का उपयोग करके रिटर्न प्रकार निर्दिष्ट करने का एक तरीका है।
उदाहरण के लिए, क्या यह करने का सही तरीका है?
def foo(id) -> list or bool:
...
जवाबों:
से प्रलेखन
कक्षा
typing.Union
संघ प्रकार; संघ [X, Y] का अर्थ है या तो X या Y।
इसलिए एक से अधिक रिटर्न डेटा प्रकार का प्रतिनिधित्व करने का उचित तरीका है
from typing import Union
def foo(client_id: str) -> Union[list,bool]
लेकिन ध्यान दें कि टाइपिंग लागू नहीं है। अजगर एक गतिशील टाइप भाषा बना हुआ है। एनोटेशन सिंटैक्स को उत्पादन में जारी होने से पहले कोड के विकास के दौरान मदद करने के लिए विकसित किया गया है। पीईपी 484 में कहा गया है, "रनटाइम के दौरान किसी प्रकार की जाँच नहीं होती है।"
>>> def foo(a:str) -> list:
... return("Works")
...
>>> foo(1)
'Works'
जैसा कि आप देख सकते हैं कि मैं एक इंट वैल्यू पास कर रहा हूं और एक str लौटा रहा हूं। हालांकि __annotations__
संबंधित मूल्यों के लिए निर्धारित किया जाएगा।
>>> foo.__annotations__
{'return': <class 'list'>, 'a': <class 'str'>}
टाइप संकेत के बारे में अधिक जानने के लिए कृपया PEP 483 पर जाएं । यह भी देखें कि पायथन 3.5 में टाइप संकेत क्या हैं ?
कृपया ध्यान दें कि यह केवल पायथन 3.5 और ऊपर की ओर उपलब्ध है। इसका उल्लेख पीईपी 484 में स्पष्ट रूप से किया गया है ।
def foo(client_id: str) -> list or bool:
जब मूल्यांकन किया जाता है तो यह कथन बराबर होता है
def foo(client_id: str) -> list:
और इसलिए आप जो चाहते हैं वह नहीं करेंगे।
"या तो ए या बी" प्रकार के संकेत का वर्णन करने का मूल तरीका संघ है (भार्गव राव के लिए धन्यवाद):
def foo(client_id: str) -> Union[list, bool]:
मैं यह नहीं चाहता कि "आप वैसे भी ऐसा क्यों करना चाहते हैं" आदमी, लेकिन शायद 2 रिटर्न प्रकार आप चाहते हैं क्या नहीं है:
यदि आप किसी प्रकार की विशेष त्रुटि-स्थिति को इंगित करने के लिए एक बूल वापस करना चाहते हैं, तो इसके बजाय अपवाद का उपयोग करने पर विचार करें। यदि आप एक बूल को कुछ विशेष मूल्य के रूप में वापस करना चाहते हैं, तो शायद एक खाली सूची एक अच्छा प्रतिनिधित्व होगी। आप यह भी बता सकते हैं कि None
किसके साथ लौटा जा सकता हैOptional[list]
यदि कोई "कई प्रकार के वापसी मूल्यों को कैसे निर्दिष्ट करें" की तलाश में यहां उतरा, तो उपयोग करें Tuple[type_value1, ..., type_valueN]
from typing import Tuple
def f() -> Tuple[dict, str]:
a = {1: 2}
b = "hello"
return a, b
अधिक जानकारी: https://code-examples.net/en/q/2651e60