python-3.x - 在 collections.defaultdict 示例“%(object)s”中“object”是如何工作的?
问题描述
在 collections.defaultdict() 的 Python3 文档中,示例部分给出了“%()s”格式的不寻常用法:
def constant_factory(value):
return lambda: value
d = defaultdict(constant_factory('<missing>'))
d.update(name='John', action='ran')
'%(name)s %(action)s to %(object)s' % d
>>> 'John ran to <missing>'
我熟悉“%()s”表示法(如果有人可以将我指向此用法的文档,则可以加分),但我的问题是,“对象”从何而来?我无法弄清楚这是如何工作的,因为字典中没有“对象”键:
print(f"{d=}")
>>> d=defaultdict(<function constant_factory.<locals>.<lambda> at 0x7fa088a5ab80>, {'name': 'John', 'action': 'ran'})
解决方案
字符串格式化行告诉 Python 将值d['object']
插入字符串。defaultdict 的工作方式是,如果您引用一个不存在的键,它将使用该键和您给它的工厂的默认值创建一个条目。因此,在这种情况下,当格式字符串引用 时d['object']
,defaultdict 创建了一个条目,其键为'object'
,值为 ,'<missing>'
并将值适当地插入到字符串中。
我猜想您显示的 d 内容的输出是在格式字符串引用创建'object':'<missing>'
条目之前运行的。
对于奖励积分,所谓的“旧式”字符串格式化操作%
记录在https://docs.python.org/2/library/stdtypes.html#string-formatting。Python 3 中引入了不同的字符串格式化工具。
推荐阅读
- node.js - 如何使用单个正则表达式验证 facebook 用户名?
- delphi - Reduce delay before audio file plays
- r - Plotting the “Average ” curve of set of curves in GGPLOT
- php - 如何在空 src 或没有 src 时删除图像标签
- javascript - 如果单击子元素,则单击时不会触发
- assembly - What is the value of this subtraction?
- python - 从变量创建文件名
- ignite - Does Ignite support GPB serialized data
- python - 用于 CRUD 的 Django REST API 一个端点
- wpf - WPF文本框,无法编辑文本……快要放弃了