Python3类型暗示为无?
我试图在函数中用Python设置一个类型提示,您可以使用Python3类型暗示为无?,python,python-3.x,nonetype,type-hinting,Python,Python 3.x,Nonetype,Type Hinting,我试图在函数中用Python设置一个类型提示,您可以使用something:str | bool='default value'添加多个类型提示,但是,None的类型提示是什么/ 只是没有 def foo( hello: str='world', bar: str=None, another_string_or_None: str|????=None): pass 或者至少可以 由于除了语法正确之外,这些注释对Python来说没有任何意义,这取决于工具
something:str | bool='default value'
添加多个类型提示,但是,None
的类型提示是什么/ 只是没有
def foo(
hello: str='world', bar: str=None,
another_string_or_None: str|????=None):
pass
或者至少可以
由于除了语法正确之外,这些注释对Python来说没有任何意义,这取决于工具
如果使用例如,则使用类型(无)
:
Typecheck还允许您使用tc.any()
(或)、tc.all()
(和)更清楚地“添加多个类型提示”
注意tc.none()
是一个类似于NAND的谓词;不是您想要的-没有参数,它将接受任何类型,相当于tc.all()
或更合适的tc。示例中的任何:
>>> 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
我注意到您的用例是“有或无”
自3.5版以来,Python支持通过。
在您的例子中,推荐的注释方式是使用。这正是你想要的
因此,另一个\u字符串\u或\u None
的提示是:
def foo(
hello: str='world', bar: str=None,
another_string_or_None: str|????=None):
...
我知道这个问题是由于@mbdevpl才被认为得到了回答的,但是,我想补充一点,type(None)
是如何得到实际的for None类型的,这在if语句检查中非常有用,例如:
import typing
def foo(
hello: str='world', bar: str=None,
another_string_or_None: typing.Optional[str]=None):
...
由于python3.5
,您还可以使用一组类型的doUnion
,其中不包含任何类型,如下所示:
if isinstance(x_var, type(None)):
pass
这相当于:
x_var: typing.Union[str, None]
y_var: typing.Union[Dict, List, None]
Python3.10(在编写本文时为beta版)将支持您最初想要的符号:str | None
为什么要提示给定的变量应始终为非类型?因为可以是None或Strw,您使用什么工具读取这些注释?默认状态是什么(未传递参数)?None或str?Python 3没有类型检查。它有PEP 3107注释,一些外部工具可能会考虑类型提示。pep没有为注释分配任何语义,这就是我想要做的可选类型语义。或者,要执行变体类型语义,存在,或者如果您关心多个签名到返回类型的映射,则存在too@solstice333是的,作为我答案的旁注:键入。联合[None,ABC]的工作原理与键入相同。可选[ABC]。如果您有typing.Optional[typing.Union[int,str]],您可以将其更改为typing.Union[None,int,str]。我不认为typing.Union[str,None]
相当于typing.Optional[str]
。考虑一个有<代码> TypedDict <代码>的情况,其中一个属性需要是<代码> STR 或<代码> No.< /代码>,但不能省略:''类MyClass(TyPEDICT):RealddField:Cuth[STR,NON] ]
x_var: typing.Union[str, None]
y_var: typing.Union[Dict, List, None]
x_var: typing.Optional[str]
y_var: typing.Optional[typing.Union[Dict, List]]