LiteralPython 类型和类型之间有什么区别Union?
我看不出它们之间有什么区别。有人能解释一下吗?
当我使用 like 时,我的 IDE 没有响应我Union[2,3]。
Union[x, y]意思是“要么x或者y”。Literal[5, 6]意思是“字面意思5或字面意思6”(不是等于其中任何一个的变量,而是字面意思 5或6)。
不同之处在于 的参数Union 必须是类型。的参数Literal是文字。类型名称(如int、float、MyClass)不是文字(但它们确实代表类型),因此它们不能在 中使用Literal。文字(如5、'Hello!'和[1,2,3])不是类型,因此它们不能在 中使用Union。
例如,这些类型不正确:
Literal[str, float] # none of the arguments are literals
Union[5, 6] # none of the arguments are types
Run Code Online (Sandbox Code Playgroud)
作为对您的评论的回应,它既None是文字又是类型。
None在Python 语法中被定义为文字:
atom: ('(' [yield_expr|testlist_comp] ')' |
'[' [testlist_comp] ']' | # maybe list literal
'{' [dictorsetmaker] '}' | # maybe dict/set literal
NAME | # NOT a literal
NUMBER | # int/float literal
STRING+ | # string literal
'...' | # Ellipsis literal
'None' | # None literal!
'True' | 'False')
Run Code Online (Sandbox Code Playgroud)
这里,None是一个文字,因此,它可以用在 中Literal。然而,它不是一个类:
>>> import inspect
>>> inspect.isclass(None)
False
>>> inspect.isclass(5)
False
>>> inspect.isclass(str)
True
Run Code Online (Sandbox Code Playgroud)
所以,它不能用在Union. 但它实际上用在Union:中,Union[str, None]意思是“输入str或什么都不输入”。从文档中Union:
您可以用作
Optional[X]简写Union[X, None]
| 归档时间: |
|
| 查看次数: |
3825 次 |
| 最近记录: |