定义 types.Dict 和 dict 之间的区别?

2024-05-21

我正在练习使用 Python 3.5 中的类型提示。我的一位同事使用typing.Dict:

import typing


def change_bandwidths(new_bandwidths: typing.Dict,
                      user_id: int,
                      user_name: str) -> bool:
    print(new_bandwidths, user_id, user_name)
    return False


def my_change_bandwidths(new_bandwidths: dict,
                         user_id: int,
                         user_name: str) ->bool:
    print(new_bandwidths, user_id, user_name)
    return True


def main():
    my_id, my_name = 23, "Tiras"
    simple_dict = {"Hello": "Moon"}
    change_bandwidths(simple_dict, my_id, my_name)
    new_dict = {"new": "energy source"}
    my_change_bandwidths(new_dict, my_id, my_name)

if __name__ == "__main__":
    main()

两者都工作得很好,看起来没有什么区别。

我已阅读typing模块文档 https://docs.python.org/3/library/typing.html.

Between typing.Dict or dict我应该在程序中使用哪一个?


使用普通的之间没有真正的区别typing.Dict and dict, no.

However, typing.Dict is a Generic type https://docs.python.org/3/library/typing.html#generics * that lets you specify the type of the keys and values too, making it more flexible:

def change_bandwidths(new_bandwidths: typing.Dict[str, str],
                      user_id: int,
                      user_name: str) -> bool:

因此,很可能在项目生命周期的某个时刻,您想要更精确地定义字典参数,此时扩展typing.Dict to typing.Dict[key_type, value_type]是比替换“更小的”变化dict.

您可以使用以下方法使其更加通用Mapping https://docs.python.org/3/library/typing.html#typing.Mapping or MutableMapping https://docs.python.org/3/library/typing.html#typing.MutableMapping在这里输入;因为你的函数不需要alter映射,我会坚持Mapping. A dict是一种映射,但您可以创建也满足映射接口的其他对象,并且您的函数很可能仍然可以使用这些对象:

def change_bandwidths(new_bandwidths: typing.Mapping[str, str],
                      user_id: int,
                      user_name: str) -> bool:

现在你清楚地告诉这个函数的其他用户你的代码实际上不会alter the new_bandwidths映射传入。

您的实际实现只是期望一个可打印的对象。这可能是一个测试实现,但就目前情况而言,如果您使用,您的代码将继续工作new_bandwidths: typing.Any,因为Python中的任何对象都是可打印的。


*: Note: If you are using Python 3.7 or newer, you can use dict as a generic type if you start your module with from __future__ import annotations https://www.python.org/dev/peps/pep-0563/, and as of Python 3.9, dict (as well as other standard containers) supports being used as generic type even without that directive https://www.python.org/dev/peps/pep-0585/.

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

定义 types.Dict 和 dict 之间的区别? 的相关文章

随机推荐

  • 如果元素隐藏则忽略 .NET 验证器(显示:无)

    我们经常在使用 javascript css 隐藏的元素 即 display none 上使用 NET 验证器时遇到问题 例如 可能有语法错误 但不用担心
  • 如何使用 Poetry 从现有项目导入requirements.txt

    我正在尝试Poetry https python poetry org 在现有项目中 它最初使用 pyenv 和 virtualenv 所以我有一个requirements txt包含项目依赖项的文件 我想导入requirements tx
  • socket.io 中的消息排序

    socket io 是否保证 on 回调将按照消息发出的顺序调用 Node js 是单个事件循环 所以是的 但是你还有另一个问题 考虑你和你的客户端之间的延迟 如果两个客户端发送消息 到达服务器的第一条消息将首先被处理 所以如果第一个客户端
  • Node + Express 会话过期?

    我有一个 Express 应用程序 并且有一个登录表单 我需要持续 1 个月的会话 我是否将 maxAge 设置为一个月 以毫秒为单位 我让两台计算机保持打开状态并登录了 24 小时 当我回来时 两台计算机都已注销 我该如何解决这个问题 实
  • UL 标签内的标签 H3 [重复]

    这个问题在这里已经有答案了 可能的重复 UL 中是否允许除 LI 之外的任何内容 https stackoverflow com questions 6056142 is anything except lis allowed in a u
  • 有没有办法将搜索栏添加到我的实际首选项屏幕?

    我一直看到有关添加您自己的搜索栏首选项的教程 但它不在我实际的 prefs xml 中 有什么方法可以在我的主偏好设置屏幕中添加一个 或者我必须将其分开 Google 似乎有 2 个滑块首选项 搜索栏首选项 https github com
  • Python Matplotlib 箱线图颜色

    我正在尝试使用 Matplotlib 制作两组箱线图 我希望每组箱线图 以及点和晶须 以不同的颜色填充 所以基本上情节上会有两种颜色 我的代码如下 如果您能帮助将这些图绘制成彩色 那就太好了 d0 and d1是每个数据列表的列表 我想要一
  • 将文件名附加到 R 中的数据框

    我想将文件名附加到我的表中 但它似乎并没有真正起作用 我正在做的是迭代文件名列表 打开它们 将所有数据附加到一个数据帧 对于每个附加文件 我想添加其文件名 我希望将其附加到每一行 以便稍后当我查看数据时 我会知道给定行源自哪个文件 但似乎并
  • 从 scikit_learn 反转 MinMaxScaler

    为了为我的生成神经网络提供数据 我需要将一些数据标准化在 1 和 1 之间 我用MinMaxScaler来自 Sklearn 效果很好 现在 我的生成器将输出 1 到 1 之间的数据 如何恢复MinMaxScaler获得真实数据 让我们首先
  • PHPStorm - 无效的后代文件名

    我正在尝试将 Windows 7 PC 上的本地 PHPStorm 项目与 Ubuntu 服务器同步 当我尝试任何类型的连接 例如 测试 SFTP 连接 时 它会失败并显示 Invalid descendent file name C np
  • MySQL小写自动转换

    我有多个在数据库表中写入数据的 Web 服务 我想针对特定字段自动将大写字符串转换为小写字符串 mysql 有没有执行此任务的函数 假设这是表 id name language 有时 在语言字段内 Web 服务会写入大写字符串 IT 我想直
  • Spring批处理条件流创建无限循环

    我有一个简单的三步流程 public Job myJob Step extract extractorStep Step process filesProcessStep Step cleanup cleanupStep return jo
  • C语言中数据类型BYTE、WORD和DWORD的格式说明符?

    在 C 语言中 与 printf 和 scanf 函数一起使用的数据类型 BYTE WORD 和 DWORD 最合适的格式说明符是什么 我很难通过控制台显示 BPB 字段的值 例如 如果我尝试使用 lu 显示 BPB BytsPerSec
  • NSURLConnection 的 URL 文件大小 - Swift

    我想在下载之前从 url 获取文件大小 这是 obj c 代码 NSURL URL NSURL URLWithString ExampleURL NSMutableURLRequest request NSMutableURLRequest
  • 如何修复“缺少表的 FROM 子句条目”错误

    我正在尝试根据游戏 ID 获取平台名称 我有如下三个表 我正在尝试加入它们以获得所需的结果 Games Id 1 2 3 4 Game Platforms Id game id platform id 1 1 1 2 1 2 3 3 3
  • AWS Route 53 - 公共子域无法公开访问?

    我已购买域名company com并创建公共子域sales company com 路由53中的公共托管区域 我将子域映射 创建 A 记录 到内部应用程序负载均衡器 ALB 即该 ALB 只能在我的公司网络内访问 我的理解是公共子域可以映射
  • Internet Explorer 8 事件因透明父母而失败

    例如 当您有一个透明的 div 并单击 in 时 该单击会直接传递到下面的元素 这种行为在其他现代浏览器中并不存在 而且我确信这也不符合 W3C 的建议 最后 它打乱了我的设计 有什么办法可以解决这个问题吗 说明 透明 例如没有定义背景颜色
  • 毕加索磁盘缓存

    我正在使用 Picasso 从 URL 加载图像 Picasso with getApplicationContext load product getImageUrl into imageView 据我所知 每次都会访问该网址 而不是缓存
  • 用PHP动态生成二维码[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试在我的网站上生成二维码 他们所要做的就是在其中包含一个 URL 我网站上的变量将提供该 URL
  • 定义 types.Dict 和 dict 之间的区别?

    我正在练习使用 Python 3 5 中的类型提示 我的一位同事使用typing Dict import typing def change bandwidths new bandwidths typing Dict user id int