联合类型在python中实际存在吗?

2024-04-25 01:12:34 发布

您现在位置:Python中文网/ 问答频道 /正文

由于python是动态类型的,我们当然可以这样做:

def f(x):
    return 2 if x else "s"

但是python的实际用途是什么呢?或者换句话说,联合类型是否存在于球拍中?或者我们只是这样使用它们:

def f(x):
    if x:
        return "x"

我们唯一需要的“联盟”是什么?


Tags: 类型returnifdef动态用途else球拍
3条回答

类型本身不存在,因为Python只是一种动态类型语言,但是在较新的Python版本中,Union type是Type Hinting的一个选项

from typing import Union,TypeVar

T = TypeVar('T')
def f(x: T) -> Union[str, None]:
    if x:
        return "x"

您可以使用它来注释代码,从而启用IDE/编辑器级别的语法检查。

添加到@MartijnPieters答案:

But is the way python was actually intended to be used?

根据参数返回不同的类型在任何语言中都不是一个好的实践。这使得测试、维护和扩展代码变得非常困难,IMHO是一种反模式(当然有时是必要的)。结果至少应该通过具有公共接口来关联。

union引入C的唯一原因是性能提高。但在Python中,由于语言的动态特性(正如Martijn注意到的那样),您没有这种性能增益。实际上引入union会降低性能,因为union的大小始终是最大成员的大小。因此,Python永远不会有类似C的union

只有在使用静态类型语言时才需要联合类型,因为您需要声明一个对象可以返回多个类型中的一个(在您的情况下是intstr,或者在另一个示例中是strNoneType)。

Python只处理对象,所以根本不需要考虑“联合类型”。Python函数返回它们返回的内容,如果程序员想为不同的结果返回不同的类型,那么这是他们的选择。然后,选择是一个架构选择,对Python解释器没有任何影响(因此这里没有“基准测试”的内容)。

Python 3.5引入了一个创建可选类型提示的标准,该标准包括^{}^{}注释。

相关问题 更多 >