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

在python中,为什么要在字符串格式的百分号和s之间引用值,python,string-formatting,Python,String Formatting,我想我在写作的时候已经找到了我问题的答案,这很好,不过如果能听到对正在发生的事情有一个更全面的解释,那就更好了 起初我认为%(module)s是多余的,但现在我认为它引用了新创建的字典值obj.\uu name\uuu,因为(“%s”%dict(module=obj.\uu name\uu))不会向字符串添加任何内容 if isinstance(obj, types.ModuleType): return ('generated/%(module)s.html#module-%(

我想我在写作的时候已经找到了我问题的答案,这很好,不过如果能听到对正在发生的事情有一个更全面的解释,那就更好了

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

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__)
在与参数中的键关联的dictionary对象中执行查找,并用dictionary中的值替换相应的
%()s
占位符

发布的代码在创建字典时遇到麻烦的原因是,键
模块
可以在字符串中多次引用。否则,您将不得不这样写:

'generated/%s.html#module-%s' % (obj.__name__, obj.__name__)
因此,字典被用来简化用于字符串插值的参数

更“现代”的方法是:

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

也可以使用命名参数:

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

您是在问“它是如何工作的/它意味着什么?”、“为什么在您发布的代码中这样做?”,还是“为什么在一般情况下这样做?”在一般情况下,它在与参数中的键的字符串关联的dictionary对象中执行查找。您是在一般情况下问的。。你的回答让我完全明白了,谢谢
'generated/{module}.html#module-{module}'.format(module=obj.__name__)