Python 避免将参数复制到str.format?

Python 避免将参数复制到str.format?,python,python-3.x,string,format,Python,Python 3.x,String,Format,我目前在代码中使用字符串格式,但是我发现我很难编码以显示重复的变量。有没有更有效的方法 print("Hello this is {} and {} and {} - Hello this is {} and {} and {} ".format(versionP, versionS, versionT, versionP, versionS, versionT)) 结果就是我想要的结果,但我需要在几个例子中重复这一点,可能会变得单调乏味。有没有办法只写一次变量?您可以指定位置,并且str.f

我目前在代码中使用字符串格式,但是我发现我很难编码以显示重复的变量。有没有更有效的方法

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

结果就是我想要的结果,但我需要在几个例子中重复这一点,可能会变得单调乏味。有没有办法只写一次变量?

您可以指定位置,并且
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

Python 3.6

我觉得它干净而简单:

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

您甚至可以在f-formatting或

中使用方法,这取决于您的Python版本。Aaron_ab提出的F字符串从3.6版开始就可以使用。答案很好,但前提是OP有python3.6版的优点。这仅适用于3.6及以上版本。。我也喜欢你的答案和字典。注意:如果字典中没有相关的键,那么使用字典的技术可能会引发异常。请注意:我已经将我的答案转换为可运行的示例,这样你就可以自己看看它是如何工作的。该过程对于您的用例是相同的。