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

2023-12-11

如果我想要一个可以是多种可能类型的类型,Union我似乎是这样表示的:

U = Union[int, str] 

U可以是一个int or a str.

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

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

Both T and U似乎只允许采用类型str and int.

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


T的类型必须在给定范围内的多次使用中保持一致scope, while U的没有。

With a 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在给定范围内不需要相互匹配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

受约束的 TypeVar 和 Union 之间有什么区别? 的相关文章

随机推荐

  • Angular 2 中带有 Observable 的 http 无法使用数据

    我是 Angular 2 和 Observables 的新手 但我想尝试一下 所以我安装了 angular cli 并做了一个简单的测试项目 我想要它做的就是读取一个 json 文件并处理组件内部的数据 第一个目的是提供服务 但我想从低基础
  • 如何在 Sitecore DMS 中触发配置文件?

    我正在寻找一种方法 允许访问者选择他们想要在网站上显示的内容 有没有办法以编程方式触发 Sitecore DMS 中的配置文件 我查看了SDN上的相关文档 http sdn sitecore net Reference Sitecore 6
  • graphql 中的空手道替换

    我不确定为什么替换不起作用 我有一个 graphql 查询 mutation updateLocation updateLocation input address
  • 为什么 Integer("09") 在 ruby​​ 中抛出异常,而 Integer("07") 工作得很好?

    我使用的是红宝石1 9 3 为什么 Integer 09 在 ruby 中抛出 Integer 异常的无效值 而 Integer 07 工作得很好 提前致谢 因为前导零是八进制 基数 8 表示法的常见约定 没有9八进制数字 因此使用 1 是
  • 在 JavaScript 中进行简单的运输和处理计算

    我在进行简单的 JavaScript 计算时遇到了麻烦 我的文档应该在订单金额为 25 美元或以下时添加 1 50 美元 如果订单金额超过 25 美元 则添加订单的 10 确切的问题是 许多公司通常会对购买的商品收取运费和手续费 创建一个网
  • SSIS For Each File 循环和文件系统任务复制文件

    我在 for every 循环容器内使用文件系统任务 如下所述 链接文本 但是 当我执行该包时 出现此错误 文件系统任务 错误 发生错误 并显示以下错误消息 该进程无法访问文件 C Book1 xlsx 因为该文件正在被另一个进程使用 我没
  • JSON 到 Java 对象,对 json 流进行建模的最佳实践

    我有一个由当前正在开发的服务器端 C 程序生成的 JSON 流 我已经获得了生成的 JSON 的示例 我担心我必须手动解析 json 我将无法使用 GSON 或 Jackson 等工具提供的普通类映射 请看一下他们提供的以下 有些 人为的示
  • 用 pandas 填充信号时保留原始数据点

    考虑以下测试数据集 testdf pandas DataFrame t datetime 2015 1 1 10 0 datetime 2015 1 1 11 32 datetime 2015 1 1 12 0 val 1 2 3 我想使用
  • JAVA使用Selenium时如何禁用Javascript?

    我正在使用 Selenium 通过 JAVA 进行网络测试 我想在 Firefox 浏览器 Google Chrome 浏览器 IE 浏览器上停止 JavaScript 我在 Firefox 浏览器上尝试了这段代码 FirefoxProfi
  • Hibernate双向@ManyToOne,更新非拥有方不起作用

    我有一个非常简单的设置来尝试带有注释的双向映射 Entity public class TypeA extends AbstractModel
  • Lua中如何转义变量

    Lua中有没有办法转义整个变量 喜欢 local blah some pattern string gsub blah 变量 blah 发生变化 并在另一个模式匹配的其他地方使用 每当 blah 中有一个魔术字符时 在其他地方完成的第二个模
  • UIButton 圆角在 iPhone 5 上无法正常工作

    这是通过 UI 扩展方法实现的 extension UIView func roundCorners corners UIRectCorner radiusWidth CGFloat radiusHeight CGFloat let pat
  • C++ 中的 Google Pub/Sub 消费者示例

    我正在尝试使用 Google Pub Sub 我需要将其集成到 C 代码库中 由于没有原生支持Google Pub Sub在 C 中 我通过使用它gRPC 因此 我生成了相应的pubsub grpc pb h pubsub grpc pb
  • Windows 文件夹共享 API

    是否有 WIN32 API 可用于管理 Windows 中的文件夹共享 一些示例链接会有所帮助 谢谢 是的 从 Windows 2000 Professional 开始 netapi32 dll 中提供了一个网络 API 它提供了此功能 N
  • 从本地 .resx 文件获取值 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何从 asp net 中的本地 resx 文件获取值 从代码隐藏 Cultur
  • Python:使用“yield from”时出现奇怪的行为

    在下面的代码中 我遇到了RecursionError maximum recursion depth exceeded def unpack given for i in given if hasattr i iter yield from
  • 如何通过箭头键更改突出显示的 tkinter 按钮?

    我正在使用 python 中的 tkinter 库开发键盘应用程序 我做了一个键盘 我想要的是突出显示一个键 然后单击箭头键我想更改该突出显示的键 这是我的键盘代码 from tkinter import import tkinter Ke
  • GCM HTTP 错误 401:未经授权

    我在客户端集成了 GCM 也制作了服务器端组件 一切工作正常 我能够从服务器向所有注册的客户端发送推送通知 我使用谷歌应用程序引擎作为我的服务器 问题出现时 I changed the API Key on server 早些时候 我使用我
  • 使用反射/ TypeDescriptor 设置匿名类型的属性值是否可能?

    我尝试使用 TypeDescriptor 并且该值没有改变 并且通过反射我得到一个错误 表明该属性没有设置器 C 匿名类型是不可变的 并且它们的属性无法更改 If you really如果愿意 您可以使用反射来设置支持字段 但这将是一个坏主
  • 受约束的 TypeVar 和 Union 之间有什么区别?

    如果我想要一个可以是多种可能类型的类型 Union我似乎是这样表示的 U Union int str U可以是一个int or a str 我注意到了TypeVars 允许可选的 var arg 参数 它们似乎也做同样的事情 T TypeV