Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3类型暗示为无?_Python_Python 3.x_Nonetype_Type Hinting - Fatal编程技术网

Python3类型暗示为无?

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来说没有任何意义,这取决于工具

我试图在函数中用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
,您还可以使用一组类型的do
Union
,其中不包含任何类型,如下所示:

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]]