请考虑以下代码段:
from collections import namedtuple
point = namedtuple("Point", ("x:int", "y:int"))
上面的代码只是一种方式来证明我试图实现什么。我想用类型提示创建< code>namedtuple。
你知道怎样才能达到预期的效果吗?
公平地说,NamedTuple
来自键入
:
>>> from typing import NamedTuple
>>> class Point(NamedTuple):
... x: int
... y: int = 1 # Set default value
...
>>> Point(3)
Point(x=3, y=1)
等于经典namedtuple
:
>>> from collections import namedtuple
>>> p = namedtuple('Point', 'x,y', defaults=(1, ))
>>> p.__annotations__ = {'x': int, 'y': int}
>>> p(3)
Point(x=3, y=1)
因此,< code>NamedTuple只是< code>namedtuple的语法糖
下面,您可以从< code>python 3.10的源代码中找到一个正在创建的< code>NamedTuple函数。如我们所见,它使用< code > collections . named tuple 构造函数,并从提取的类型中添加< code>__annotations__:
def _make_nmtuple(name, types, module, defaults = ()):
fields = [n for n, t in types]
types = {n: _type_check(t, f"field {n} annotation must be a type")
for n, t in types}
nm_tpl = collections.namedtuple(name, fields,
defaults=defaults, module=module)
nm_tpl.__annotations__ = nm_tpl.__new__.__annotations__ = types
return nm_tpl
您可以使用键入。NamedTuple
从文档
namedtuple
的键入版本。
>>> import typing
>>> Point = typing.NamedTuple("Point", [('x', int), ('y', int)])
这仅在Python 3.5以后的版本中存在
自3.6以来类型化命名元组的首选语法是
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int = 1 # Set default value
Point(3) # -> Point(x=3, y=1)
编辑 开始 Python 3.7,请考虑使用数据类
(您的 IDE 可能尚不支持它们进行静态类型检查):
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int = 1 # Set default value
Point(3) # -> Point(x=3, y=1)
问题内容: 考虑以下代码: 上面的代码只是演示我正在尝试实现的方法。我想使用类型提示。 您知道如何以一种优雅的方式达到预期效果吗? 问题答案: 自3.6以来,类型化命名元组的首选语法为 编辑 从Python 3.7开始,请考虑使用(您的IDE可能尚不支持它们进行静态类型检查):
使用python 3,可以选择使用类型符号。 我的问题是,如果一个函数返回None,应该加上这个,还是留空。 即 哪个PEP解决了这个问题?
有没有办法告诉WebStom在AngularJS(v1)组件超文本标记语言模板文件中哪个类型? 如果它是一个JavaScript文件,我可以使用JSDoc,WebStorm会使用该信息,并会正确检测未使用的方法等。 WebStorm的文档讲述了Angular插件,但该插件似乎无法与较新的AngularJS组件一起工作,只能与较旧的< code>ng-controller样式一起工作。
问题内容: 长话短说 PEP-557在Python标准库中引入了数据类,该类基本上可以充当和的角色。现在,我想知道如何将用例分隔,其中namedtuple仍然是更好的解决方案。 数据类优于NamedTuple 当然,如果需要,所有功劳都归功于: 可变对象 继承支持 装饰器,可管理的属性 现成的方法定义或可自定义的方法定义 在同一PEP中简要说明了数据类的优点:为什么不只使用namedtuple。
问题内容: 这似乎是一个常见问题,但是我在Google或SO上都找不到。如果找到一篇,请给我指出这篇文章。 我如何在bash提示符(当您按ENTER键时)中插入新行,类似于Windows提示符? Linux: 视窗: 我之间需要额外的空间。 问题答案: 更改PS1 Bash提示变量:
我有一个通用记录,如下所示,其中是一个值为字符串的映射。 下面是holder map的数据: 我想提取字符串和字符串映射中的holder数据。我不知道该怎么做?我尝试了两个选项,如下所示: 此返回对象: 这返回一个Map,但我看不出它是一个键和值的Map。 当我打印时,我看到这样的情况,这显然不是键/值的映射。我做错了什么?以及如何从GenericRecord中提取键入的映射?