避免在str.format中重复使用参数?

4

我目前在我的代码中使用字符串格式化,但我发现我正在硬编码以显示重复的变量。是否有更有效的方法来做到这一点?

print("Hello this is {} and {} and {} - Hello this is {} and {} and {} ".format(versionP, versionS, versionT, versionP, versionS, versionT))

这个结果是我想要的,但是我需要在多个实例中重复这个过程,可能会变得很繁琐。有没有一种方法可以只写一次变量?


这取决于你的Python版本。F-strings是由Aaron_ab提出的,从3.6版本开始可用。 - Bram Vanroy
2个回答

8

您可以指定位置,str.format 将知道使用哪些参数:

a, b, c = 1, 2, 3
string = "This is {0}, {1}, and {2}. Or, in reverse: {2}, {1}, {0}"
string.format(a, b, c)
# 'This is 1, 2, and 3. Or, in reverse: 3, 2, 1'

您也可以传递关键字参数,或解包一个字典:
a, b, c = 1, 2, 3
string = """This is {versionP}, {versionS}, and {versionT}. 
            Or, in reverse: {versionT}, {versionS}, {versionP}"""
# string.format(versionP=a, versionS=b, versionT=c)
string.format(**{'versionP': a, 'versionS': b, 'versionT': c})
# This is 1, 2, and 3. 
#       Or, in reverse: 3, 2, 1

注意,使用字典的技巧在字典中没有相关键可放置时可能引发异常。 - Aaron_ab
1
注意:我已将我的答案转换为可运行的示例,这样您就可以自己看到它是如何工作的。对于您的用例,该过程是相同的。 - cs95

6

Python 3.6

我觉得它干净简单:

print(f"Hello this is {versionP} and {versionS} and {versionT} - 
        Hello this is {versionP} and {versionS} and {versionT}")

您甚至可以在f格式化字符串内部评估方法或嵌套的f格式化字符串


很好的回答,但这假设OP有Python3.6。 - cs95
好的观点。这只适用于3.6及以上版本。我也喜欢你的答案,使用字典的方法。 - Aaron_ab

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