在 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__)
认为我在写作时已经找到了我的问题的答案,这很好,但最好能听到对正在发生的事情的更明智的解释!
起初我认为%(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__)