gpt4 book ai didi

python - 受约束的 TypeVar 和 Union 之间有什么区别?

转载 作者:行者123 更新时间:2023-12-02 09:31:53 30 4
gpt4 key购买 nike

如果我想要一个可以是多种可能类型的类型,Unions 似乎就是我表示的方式:

U = Union[int, str] 

U 可以是 intstr

我注意到,TypeVar允许可选的 var-arg 参数,它们似乎也做同样的事情:

T = TypeVar("T", int, str)

TU 似乎都只允许采用 strint 类型。

这两种方式有什么区别,什么时候应该首选每种方式?

最佳答案

T 的类型必须在给定 scope 内的多次使用中保持一致,而 U 则不然。

使用 Union 类型作为函数参数,参数和返回类型都可以不同:

U = Union[int, str]

def union_f(arg1: U, arg2: U) -> U:
return arg1

x = union_f(1, "b") # No error due to different types
x = union_f(1, 2) # Also no error
x = union_f("a", 2) # Also no error
x # And it can't tell in any of the cases if 'x' is an int or string

将其与具有 TypeVar 的类似情况进行比较,其中参数类型必须匹配:

T = TypeVar("T", int, str)

def typevar_f(arg1: T, arg2: T) -> T:
return arg1

y = typevar_f(1, "b") # "Expected type 'int' (matched generic type 'T'), got 'str' instead
y = typevar_f("a", 2) # "Expected type 'str' (matched generic type 'T'), got 'int' instead

y = typevar_f("a", "b") # No error
y # It knows that 'y' is a string

y = typevar_f(1, 2) # No error
y # It knows that 'y' is an int

因此,如果允许多种类型,请使用 TypeVar,但单个范围内 T 的不同用法必须彼此匹配。如果允许多种类型,请使用 Union,但给定范围内 U 的不同用法不需要​​彼此匹配。

关于python - 受约束的 TypeVar 和 Union 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58903906/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com