我想我在写作时已经找到了问题的答案,这很好,不过如果能听到关于正在发生的事情的更明智的解释那就太好了!
起初我认为 %(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__)
因此字典用于简化用于字符串插值的参数。
更“现代”的方法是使用 str.format()
:
'generated/{0}.html#module-{0}'.format(obj.__name__)
此处的 {0}
是传递给 format()
的第一个参数的占位符,其所有实例都将被替换。
或者您可以使用命名参数:
'generated/{module}.html#module-{module}'.format(module=obj.__name__)
关于python - 在 python 中,为什么引用字符串格式的百分号和 s 之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34238771/