- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我看来,NamedTuple
和 TypedDict
非常相似,Python 开发人员自己也认识到这一点。
Concerning the PEP, I would rather add a common section about NamedTuple and TypedDict, they are quite similar and the latter already behaves structurally. What do you think? source
但 Guido 似乎对此不太确定。
I'm not so sure that NamedTuple and TypedDict are really all that similar (except they are both attempts to handle outdated patterns in a statically-typed world).
所以,这是我懒惰的尝试,试图让其他人在官方文档似乎缺乏的地方提出一个清晰的比较。
最佳答案
Python 及其社区正在努力解决“结构”问题:如何最好地将相关值分组到复合数据对象中,以允许对组件进行逻辑/轻松访问(通常通过名称)。有许多相互竞争的方法:
collections.namedtuple
个实例tuple
和 list
这样的序列,每个位置/槽都有隐含意义(古老但非常常见)“应该有一个——最好只有一个——显而易见的方法来做到这一点。”
typing
库和 Mypy,就像整个 Python 社区一样,同时在努力研究如何更有效地定义类型/模式,包括复合对象。您链接到的讨论是摔跤的一部分,并试图找到前进的道路。
NamedTuple
是 collections.namedtuple
工厂产生的结构化对象的类型父类(super class); TypedDict
Mypy 尝试定义使用固定模式字典时出现的键和相应类型的值。如果您只是想“我有一组固定的键应该映射到一组固定的类型值”,它们是相似的。但是由此产生的实现和约束是非常不同的。袋子和盒子相似吗?或许。也许不会。取决于您的观点以及您希望如何使用它们。倒酒,开始讨论!
NamedTuple
现在是 Python 的正式组成部分。
from typing import NamedTuple
class Employee(NamedTuple):
name: str
id: int
TypedDict
最初是作为 Mypy 的一项实验性功能出现的,目的是将打字纳入异构的、面向结构的字典使用。然而,从 Python 3.8 开始,它被纳入标准库。
try:
from typing import TypedDict # >=3.8
except ImportError:
from mypy_extensions import TypedDict # <=3.7
Movie = TypedDict('Movie', {'name': str, 'year': int})
基于类的类型构造器 is also available :
class Movie(TypedDict):
name: str
year: int
尽管存在差异,NamedTuple
和 TypedDict
都锁定了要使用的特定键,以及每个键对应的值的类型。因此,它们的目标基本相同:为复合/结构类型提供有用的类型化机制。
Python 的标准 typing.Dict
侧重于更同质的并行映射,定义键/值类型,而不是键本身。因此,它在定义恰好存储在字典中的复合对象时不是很有用。
ConnectionOptions = Dict[str, str]
关于python - Python/mypy 中 NamedTuple 和 TypedDict 的主要区别是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53409117/
foo.py : kwargs = {"a": 1, "b": "c"} def consume(*, a: int, b: str) -> None: pass consume(**kwar
如果我在字典中有一个带有无效标识符的键,例如 A(2) .如何创建 TypedDict与这个领域? 例如 from typing import TypedDict class RandomAlphab
我正在寻找一个 Python (3.8+) 函数: 输入:TypedDict的键值 输出: 返回值(简单) 是否有适当的类型提示(我被卡住的地方) 这里有一个代码示例来帮助解释: from typin
Python 3.8 引入 TypedDict应该用于输入 dict 对象的类: from typing import TypedDict class MyDict(TypedDict): n
我希望能够编写一个函数来检查字典是否符合我的 TypedDict,但是我无法获得正确的泛型类型。所以结果函数应该是这样的: T = typing.Generic('T', bound=...) # T
以下代码: class A(TypedDict): abc: str class B(TypedDict): xyz: str def func(dict_class: Union[t
我有一堆@dataclass es 和一堆对应的 TypedDict s,我想促进它们之间的平滑和类型检查转换。 例如,考虑 from dataclasses import dataclass fro
我正在尝试创建一个 TypedDict 子类,如果某个键会导致 KeyError 并且该键是TypedDict 的注释为 Optional。我意识到这不太可能,因为 TypedDict 除了定义注释外
考虑以下代码: from typing import Any, Mapping, TypedDict class MyDict(TypedDict): foo: bool def my_fun
我在 Python 3.8+ Django/Rest-Framework 环境中工作,在新代码中强制执行类型,但建立在许多未类型化的遗留代码和数据上。我们广泛使用 TypedDicts 来确保我们生成
我在 attrs 数据类 Example 中有一个 TypedDict DictWithOnlyX,其中 mypy 提示从 my 的 getdict() 方法返回的类型类,即使声明了返回类型: fro
在我看来,NamedTuple 和 TypedDict 非常相似,Python 开发人员自己也认识到这一点。 Concerning the PEP, I would rather add a comm
我想将 TypedDict 与 Union 结合起来。这样函数就可以返回 A 或 B。 Mypy 能够直接正确检测 TypedDict 返回类型。但是当 TypedDict 嵌套在 Union 中时,
我是一名优秀的程序员,十分优秀!