受约束的 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 之间有什么区别? 的相关文章

  • 是否可以模拟 Python 3.6 中的内置 len() 函数?

    是否可以模拟内置len Python 3 6 中的函数 我有一个类定义了一个简单的方法 该方法依赖于len 函数如下 class MyLenFunc object def is longer than three characters se
  • 与 iexact 一起使用时,Django get_or_create 无法设置字段

    我想用name iexact with get or create尽可能避免用户输入字段的重复 我的提供者模型有一个名称字段 我在其中使用get or create 查找工作正常 但在第一次创建实例时 如下面的 p1 Timber 示例 名
  • python导入模块时如何避免一直写模块名?

    我用math最近模块很多 我不想写math sqrt x and math sin x 每时每刻 我想缩短它并写sqrt x and sin x How 对于较长的模块名称 通常会缩短它们 例如 import numpy as np 然后您
  • 为什么我不能使用“exclude”从 python 轮子中排除“tests”目录?

    考虑以下包结构 与以下setup py内容 from setuptools import setup find packages setup name dfl client packages find packages exclude te
  • Python 中的安全解除引用

    Groovy 有一个很好的安全取消引用运算符 这有助于避免 NullPointerExceptions variable method The method仅当以下情况时才会被调用variable is not null 有没有办法在 Py
  • Python,将迭代函数变成递归函数

    我创建了一个输出 4 3 2 1 0 1 2 3 4 的迭代函数 def bounce2 n s n for i in range n print n n n 1 if n lt 0 for i in range s 1 print n n
  • 为什么在 Windows 中使用 GetConsoleScreenBufferInfoEx 时控制台窗口会缩小?

    我正在尝试使用 GetConsoleScreenBufferInfoEx 和 SetConsoleScreenBufferInfoEx 设置 Windows 命令行控制台的背景和前景色 我正在 Python 中使用 wintypes 进行此
  • Python sqlite3游标没有属性commit

    当我运行这段代码时 path Scripts wallpapers single png conn sqlite3 connect Users Heaven Library Application Support Dock desktopp
  • Django 的 URL 覆盖率测试为 0%,为什么?

    使用姜戈鼻子 我对 URL 进行了测试 但 URL 覆盖率仍然为 0 为什么 python manage py 测试配置文件 这是我的报道 Name Stmts Miss Cover Missing profiles 0 0 100 pro
  • 在 Flask (WSGI) 中使用全局单例,我是否需要担心竞争条件? [复制]

    这个问题在这里已经有答案了 Flask 的 hello world 演示是 from flask import Flask app Flask name app route def hello return Hello World if n
  • 错误:无法访问文件“$libdir/plpython2”:没有这样的文件或目录

    我正在运行 postgresql 9 4 PostgreSQL 9 4 4 on x86 64 unknown linux gnu compiled by gcc GCC 4 1 2 20070626 Red Hat 4 1 2 14 64
  • 如何对这个 Flask 应用程序进行单元测试?

    我有一个 Flask 应用程序 它使用 Flask Restless 来提供 API 我刚刚写了一些身份验证来检查 如果消费者主机被识别 该请求包含一个哈希值 通过加密 POST 的请求内容和 GET 的 URL 以及秘密 API 密钥来计
  • Python 视频框架

    我正在寻找一个 Python 框架 它将使我能够播放视频并在该视频上绘图 用于标记目的 我尝试过 Pyglet 但这似乎效果不是特别好 在现有视频上绘图时 会出现闪烁 即使使用双缓冲和所有这些好东西 而且似乎没有办法在每帧回调期间获取视频中
  • pip 安装软件包两次

    不幸的是我无法重现它 但我们已经见过几次了 pip 将一个软件包安装两次 如果卸载第一个 第二个就会可见并且也可以被卸载 我的问题 如果一个包安装了两次 如何用 python 检查 背景 我想编写一个测试来检查这一点 devOp Updat
  • 一起使用 Flask 和 Tornado?

    我是以下的忠实粉丝Flask 部分是因为它很简单 部分是因为它有很多扩展 http flask pocoo org extensions 然而 Flask 是为了在 WSGI 环境中使用而设计的 而 WSGI 不是非阻塞的 所以 我相信 它
  • 大型数据集上的 Sklearn-GMM

    我有一个很大的数据集 我无法将整个数据放入内存中 我想在这个数据集上拟合 GMM 我可以用吗GMM fit sklearn mixture GMM 重复小批量数据 没有理由重复贴合 只需随机采样您认为机器可以在合理时间内计算的尽可能多的数据
  • SQLAlchemy:避免声明式样式类定义中的重复

    我正在使用 SQLAlchemy 并且我的对象模型中的许多类具有相同的两个属性 id 和 整数和主键 以及名称 字符串 我试图避免在每个类中声明它们 如下所示 class C1 declarative base id Column Inte
  • 在游戏中实现功能

    我在完成这部分作业时遇到了麻烦 我必须宣布游戏的获胜者 然后输入到函数中 输入所有 if 语句后 我必须创建一个函数def playGame 这必须包括 showRules user getUserChoice computer getCo
  • Python 枚举子集迭代

    我想迭代以下枚举的子集 class Items enum Enum item1 0 item2 1 item3 2 item4 3 item5 4 item6 5 item7 6 item8 7 说我想 for item in Items
  • 从 pandas 数据框中绘制堆积条形图

    我有数据框 payout df head 10 复制以下 Excel 绘图的最简单 最智能和最快的方法是什么 我尝试过不同的方法 但无法让一切都到位 Thanks 如果您只想要一个堆积条形图 那么一种方法是使用循环来绘制数据框中的每一列 并

随机推荐

  • 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