如何在Python中用一个变量替换%s

3

我有一个字符串,像这样:

strTemp='i don\'t want %s repeat the %s variable again %s and again %s'%('aa','aa','aa','aa')

我想要用'aa'替换所有的%s,因此我必须重复多次输入'aa'。该如何告诉程序我想用同一个变量替换所有的%s,这样就不需要多次输入变量。
3个回答

7

不建议使用 % 运算符。请改用 str.format

strTemp='i don\'t want {0} repeat the {0} variable again {0} and again {0}'.format('aa')

{} 语法是较新且更加时尚的。您可以通过它执行许多 % 语法无法实现的操作。我认为 % 语法已从 Python 3 中删除,但这可能是错误的。 - zwol
{} 明显更强大,但我不明白这怎么导致了对 % 的不鼓励。 - Tim
@Tim http://docs.python.org/2/library/stdtypes.html#str.format 说:“‘.format()’是Python 3中的新标准,应该优先使用它,而不是在新代码中描述的字符串格式化操作中使用百分号格式化。” - zwol
比我预期的更快,这两种方法都可行,我想尝试 {} 语法。 - lynn8570
@Tim,不过我错了,在Python 3中仍然存在风格的格式化:http://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting - zwol
咳咳,% 更快。有些人可能更喜欢使用 str.format(),但是关于 %,有人说“这里描述的格式化操作已经过时,并且在 Python 的未来版本中可能会消失”,但是对于 Tkinter 小部件的 cnf={} 关键字参数也曾经有过同样的说法。 - pydsigner

6
您可以使用命名格式化参数语法:
strTemp='i don\'t want %(key)s repeat the %(key)s variable again %(key)s and again %(key)s' % {
    'key': 'replacement value',
}

并不一定更好,因为您需要重复四次键,但如果您的替换值很长,或者是带有副作用的计算,您真的不想多做一次,那么这是一个不错的选择。


0

如果你有很多重复的内容,又不想一遍遍地输入 {0} 或者 %(var)s,你可以考虑使用一个很少用到的(占位符)字符,然后进行替换,例如:

p='µ µµ µµµ µµµµ µµµµµ {1}'.replace('µ','{0}').format(' muahaha ', 'duh')

或者针对单个替换变量:

strTemp='i don\'t want µ repeat the µ variable again µ and again µ'.replace('µ','aa')

为了最大限度地压缩并完全无法读取,您可以使用“reduce”将许多替换链接在一起,同时最小化大小开销(只需要指定函数和参数列表)。我曾经编写过一个脚本以这种方式压缩字符串文字(它还使用其他技巧来减小大小)。 - Antimony
有趣的想法!;-) 但我已经超出了OP的原意,另一方面,提醒这样好的内置电池从来没有错过。;-) - Don Question
@Antimony:顺便说一下,我使用我的编辑器(vim)的功能来进行这些多余的输入:inoremap ¹ {0} inoremap ² {1} .... ;-) - Don Question

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接