जवाबों:
तुम खोज रहे हो 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में ज्यादातर मामलों में उपयोग होता है, लेकिन यहाँ नहीं है, जो एक निरीक्षण है)।