在 python 为什么引用字符串格式的百分号和 s 之间的值

In python why reference a value inbetween the percent sign and s of a string format

认为我在写作时已经找到了我的问题的答案,这很好,但最好能听到对正在发生的事情的更明智的解释!

起初我认为%(module)s是多余的,但现在我认为它引用了新创建的字典值obj.__name__因为('%s' % dict(module=obj.__name__))不会向字符串添加任何内容?

if isinstance(obj, types.ModuleType):
        return ('generated/%(module)s.html#module-%(module)s' %
                dict(module=obj.__name__))

代码中

'generated/%(module)s.html#module-%(module)s' % dict(module=obj.__name__)

在与括号中的键关联的字典对象中执行查找,并将相应的 %()s 占位符替换为字典中的值。

发布的代码麻烦地创建字典的原因是键 module 可以在字符串中多次引用。否则你必须这样写:

'generated/%s.html#module-%s' % (obj.__name__, obj.__name__)

所以字典被用来简化用于字符串插值的参数。

更 "modern" 的方法是 str.format():

'generated/{0}.html#module-{0}'.format(obj.__name__)

这里的 {0} 是传递给 format() 的第一个参数的占位符,它的所有实例都将被替换。

或者您可以使用命名参数:

'generated/{module}.html#module-{module}'.format(module=obj.__name__)