2024-04-25 01:12:34 发布
网友
由于python是动态类型的,我们当然可以这样做:
def f(x): return 2 if x else "s"
但是python的实际用途是什么呢?或者换句话说,联合类型是否存在于球拍中?或者我们只是这样使用它们:
def f(x): if x: return "x"
我们唯一需要的“联盟”是什么?
类型本身不存在,因为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。
union
只有在使用静态类型语言时才需要联合类型,因为您需要声明一个对象可以返回多个类型中的一个(在您的情况下是int或str,或者在另一个示例中是str或NoneType)。
int
str
NoneType
Python只处理对象,所以根本不需要考虑“联合类型”。Python函数返回它们返回的内容,如果程序员想为不同的结果返回不同的类型,那么这是他们的选择。然后,选择是一个架构选择,对Python解释器没有任何影响(因此这里没有“基准测试”的内容)。
Python 3.5引入了一个创建可选类型提示的标准,该标准包括^{}和^{}注释。
类型本身不存在,因为Python只是一种动态类型语言,但是在较新的Python版本中,Union type是Type Hinting的一个选项
您可以使用它来注释代码,从而启用IDE/编辑器级别的语法检查。
添加到@MartijnPieters答案:
根据参数返回不同的类型在任何语言中都不是一个好的实践。这使得测试、维护和扩展代码变得非常困难,IMHO是一种反模式(当然有时是必要的)。结果至少应该通过具有公共接口来关联。
将
union
引入C的唯一原因是性能提高。但在Python中,由于语言的动态特性(正如Martijn注意到的那样),您没有这种性能增益。实际上引入union
会降低性能,因为union
的大小始终是最大成员的大小。因此,Python永远不会有类似C的union
。只有在使用静态类型语言时才需要联合类型,因为您需要声明一个对象可以返回多个类型中的一个(在您的情况下是
int
或str
,或者在另一个示例中是str
或NoneType
)。Python只处理对象,所以根本不需要考虑“联合类型”。Python函数返回它们返回的内容,如果程序员想为不同的结果返回不同的类型,那么这是他们的选择。然后,选择是一个架构选择,对Python解释器没有任何影响(因此这里没有“基准测试”的内容)。
Python 3.5引入了一个创建可选类型提示的标准,该标准包括^{} 和^{} 注释。
相关问题 更多 >
编程相关推荐