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

标签 python string-formatting

我想我在写作时已经找到了问题的答案,这很好,不过如果能听到关于正在发生的事情的更明智的解释那就太好了!

起初我认为 %(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/

相关文章:

python - 格式化字符串时不理解 "IndexError: tuple index out of range"的原因

python - 带有 FancyArrowPatch 的虚线

python - 告诉metaflow使用conda装饰器通过pip安装包

python - 和/或约束的混合整数线性规划

c# - 如何在 C# 中获取特定的文化数字模式

java - 为什么 sc.next() 或 sc.nextLine() 在循环内不起作用?

java - 根据字符串值修剪java字符串?

python - 将数字附加到列表但跳过第一行 : code not working

python - melt pandas df 其中变量名是那个单元格的(行名+列名)

java - 更严格的 String.format 不会忽略额外的参数?