Python 3类型提示为None?

时间:2013-10-05 20:54:27

标签: python python-3.x nonetype type-hinting

def foo(
        hello: str='world', bar: str=None,
        another_string_or_None: str|????=None):
    pass

我正在尝试在函数中设置Python中的类型提示,您可以使用something: str|bool='default value'添加多个类型提示,但是,None的类型提示是什么? :/

4 个答案:

答案 0 :(得分:18)

从你的例子:

def foo(
        hello: str='world', bar: str=None,
        another_string_or_None: str|????=None):
    ...

我注意到你的用例是“某事或无”。

从3.5版开始,Python通过typing module支持类型注释。 在您的情况下,推荐的注释方法是使用typing.Optional[something] hint。这具有您正在寻找的确切含义。

因此another_string_or_None的提示将是:

import typing

def foo(
        hello: str='world', bar: str=None,
        another_string_or_None: typing.Optional[str]=None):
    ...

答案 1 :(得分:2)

它只是None

>>> def nothing(nun: None) -> None:
...     return nun
... 
>>> nothing(None)
>>> 

或者至少,可以

由于这些注释除了处于正确的语法之外对Python来说毫无意义,因此它取决于工具。

如果您使用typecheck-decorator,那么you'll need to使用type(None)

>>> import typecheck as tc
>>>
>>> @tc.typecheck
>>> def nothing(nun: type(None)) -> type(None):
...     return nun
... 
>>> nothing(None)
>>> nothing(0)
typecheck.framework.InputParameterError: nothing() has got an incompatible value for nun: 0
>>> nothing(False)
typecheck.framework.InputParameterError: nothing() has got an incompatible value for nun: False

Typecheck还允许你更清楚地#34;添加多个类型提示" tc.any()(OR),tc.all()(AND),以及更多。

请注意tc.none()是类似NAND的谓词; 你在寻找什么 - 没有参数它将接受任何类型,相当于tc.all()或更贴切tc.anything

答案 2 :(得分:1)

我知道这个问题要感谢@mbdevpl,但是,我想补充一下,type(None)是如何获取None类型的实际值的,例如,在{{1 }},例如:

if statement check

并且自if isinstance(x_var, type(None)): pass 起,您还可以对无类型的一堆类型执行python3.5,如下所示:

Union

这等效于:

x_var: typing.Union[str, None]
y_var: typing.Union[Dict, List, None]

答案 3 :(得分:1)

Python 3.10(在撰写本文时处于 Beta 版)将支持您最初所需的表示法:str | None

Source