Yanıtlar:
Arıyorsunuz Optional
.
İade türünüz olabileceğinden datetime
(iade edildiği gibi datetime.utcnow()
) veya None
şunları kullanmanız gerekir Optional[datetime]
:
from typing import Optional
def get_some_date(some_argument: int=None) -> Optional[datetime]:
# as defined
Yazma ile ilgili belgelere göre Optional
kısayol:
Optional[X]
eşittirUnion[X, None]
.
burada Union[X, Y]
türde bir değer anlamına gelir X
ya da Y
.
Başkalarının tökezleyebileceği Optional
ve bunun anlamının farkında olamayacağı endişeleri nedeniyle açık olmak istiyorsanız, her zaman şunları kullanabilirsiniz Union
:
from typing import Union
def get_some_date(some_argument: int=None) -> Union[datetime, None]:
Ama bunun iyi bir fikir olduğunu, Optional
gösterge edici bir isim olduğunu ve birkaç tuş vuruşunu kurtardığını sanıyorum .
@ Michael0x2a tarafından yapılan yorumlarda belirtildiği gibi burada kullanılmaya gerek olmadığı Union[T, None]
için transforme edilmiştir .Union[T, type(None)]
type
Görsel olarak bunlar farklı olabilir, ancak programlı olarak, her iki durumda da sonuç tamamen aynıdır ; *Union[datetime.datetime, NoneType]
içinde saklanan tip olacaktır :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]}
* Kullanım typing.get_type_hints
nesnelerin kapmak için __annotations__
doğrudan erişmek yerine niteliğini.
Optional[T]
Tip fonksiyonel programlama toplumda iyi bilinmektedir. Okuyucu sadece bunun ne anlama geldiğini bilmekle kalmayacak Union[T, None]
, aynı zamanda anlamlı bir cevap olmadığında, bir hata olduğunda veya sonuç bulunamadığında işlevin döndüreceği kullanım modelini de tanıyacaktır.
Union[datetime, type(None)]
içinUnion[datetime, None]
uygun - PEP 484 kullanarak,None
tür ek açıklaması içinde daima eşdeğer olarak kabul edilirtype(None)
. (typing
Belgeler aslındaNone
çoğu durumda kullanılır, ancak burada kullanılmaz, bu bir gözetimdir).