我是Python的新手
namedtuple
尤其
_field_defaults
.
根据Python
3.12.3 official doc
,
一些
namedtuple._field_defaults
将字段名称映射到默认值的字典。
为什么Copilot建议的以下代码片段不起作用?
上面的基于文本的代码片段。
from collections import namedtuple
# Define the namedtuple
Person = namedtuple('Person', 'name age')
# Set default values
Person._field_defaults['name'] = 'John'
Person._field_defaults['age'] = 30
# Create a namedtuple with default values
person1 = Person()
# Create a namedtuple with a different name
person2 = Person(name='Alice')
print(person1) # Outputs: Person(name='John', age=30)
print(person2) # Outputs: Person(name='Alice', age=30)
产生了以下错误。
>>> person1 = Person()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() missing 2 required positional arguments: 'name' and 'age'
为什么?
p._field_defaults['age'] = 100
更改了字典,但的默认构造
Person
没有更新?
>>> Person=namedtuple('Person', ['name', 'age'], defaults=['default_name', 0])
>>> p = Person()
>>> p
Person(name='default_name', age=0)
>>> p._field_defaults
{'name': 'default_name', 'age': 0}
>>> p._field_defaults['age'] = 100
>>> p = Person()
>>> p
Person(name='default_name', age=0)
>>>
在哪里可以找到Python的实现
命名的元组
? 我想了解更多关于如何
_字段故障
使用。
假设我创建了
Account = namedtuple('Account', ['type', 'name', 'id'])
,
有办法为指定默认值吗
type
和
id
并让用户提供
name
? 当然,我可以定义
Account
成为
Account = namedtuple('Account', ['type', 'name', 'id'], defaults = ['default_type', None, account_id])
。但是,有没有办法避免
None
在中
defaults
领域