जवाबों:
तुम खोज रहे हो Optional
।
चूंकि आपका रिटर्न प्रकार या तो हो सकता है datetime
(जैसा कि लौटाया गया है datetime.utcnow()
) या None
आपको उपयोग करना चाहिए Optional[datetime]
:
from typing import Optional
def get_some_date(some_argument: int=None) -> Optional[datetime]:
# as defined
टाइपिंग पर प्रलेखन से, के Optional
लिए आशुलिपि है:
Optional[X]
के बराबर हैUnion[X, None]
।
जहां का Union[X, Y]
अर्थ है प्रकार X
या Y
।
यदि आप उन चिंताओं के कारण स्पष्ट होना चाहते हैं जो दूसरों पर ठोकर खा सकती हैं Optional
और उन्हें यह एहसास नहीं है कि यह अर्थ है, तो आप हमेशा उपयोग कर सकते हैं Union
:
from typing import Union
def get_some_date(some_argument: int=None) -> Union[datetime, None]:
लेकिन मुझे संदेह है कि यह एक अच्छा विचार है, Optional
एक सांकेतिक नाम है और यह किस्ट्रोक्स के एक जोड़े को बचाता है।
के रूप में द्वारा @ Michael0x2a टिप्पणी में कहा Union[T, None]
करने के लिए खुद को बदल रहा है Union[T, type(None)]
उपयोग करने की आवश्यकता है ताकि type
यहाँ।
दृष्टिगत रूप से ये भिन्न हो सकते हैं लेकिन प्रोग्रामिक रूप से, दोनों ही मामलों में, परिणाम बिल्कुल समान हैं ; Union[datetime.datetime, NoneType]
प्रकार में संग्रहीत किया जाएगा get_some_date.__annotations__
* :
>>> from typing import get_type_hints
>>> print(get_type_hints(get_some_date))
{'return': typing.Union[datetime.datetime, NoneType],
'some_argument': typing.Union[int, NoneType]}
* इसे सीधे एक्सेस करने के बजाय typing.get_type_hints
ऑब्जेक्ट की __annotations__
विशेषता को हथियाने के लिए उपयोग करें ।
Optional[T]
प्रकार कार्यात्मक प्रोग्रामिंग समुदाय में अच्छी तरह से जाना जाता है। पाठक को न केवल यह पता होगा कि इसका मतलब है Union[T, None]
, बल्कि उपयोग पैटर्न को भी पहचानेंगे कि फ़ंक्शन कोई भी नहीं लौटाएगा जब कोई सार्थक उत्तर नहीं होता है, कोई त्रुटि होती है, या परिणाम नहीं मिलता है।
Union[datetime, type(None)]
करने के लिएUnion[datetime, None]
- के अनुसार पीईपी 484 , का उपयोग करNone
एक प्रकार एनोटेशन के भीतर हमेशा के बराबर होने के रूप में व्यवहार किया जाता हैtype(None)
। (typing
प्रलेखन वास्तवNone
में ज्यादातर मामलों में उपयोग होता है, लेकिन यहाँ नहीं है, जो एक निरीक्षण है)।