为什么我会使用“.format()”而不是“+”?

时间:2015-03-26 22:48:49

标签: python string formatting

我想知道为什么我应该使用这样的东西:

name = "Doe"
surname = "John"
print("He is {0} {1}".format(surname, name))

而不是:

name = "Doe"
surname = "John"
print("He is" + surname + " " + name) 

2 个答案:

答案 0 :(得分:6)

对于初学者,请尝试使用+

执行此操作
>>> concatenate_me = (1,2,99999,100,600, 80)
>>>'{0} {0} {2} {2} {1} {2} {3} {5} {5} {4} {0} {2}'.format(*concatenate_me)

.format()权益:

  • 包含占位符 ..{0}..{1}..{2}。使用.format,传递的参数将替换为各自的占位符(基于它们的顺序)。这允许您重用参数,如上例所示。

  • 在使用.format的每次替换中,您都有format specification:)。这个规范允许你控制你所做的每个替换的许多属性,并且它有一个完整的迷你语言。

此外,.format是一个函数,您可以在需要时将其作为参数传递。在Python 3中,它被称为advanced string formatting,因为它比简单连接更强大。


如果真的想要使用.format函数,你可以做一些非常狂野和灵活的事情,例如:

>>>'Python {0.version_info[0]:!<13.2%}'.format(sys)
'Python 300.00%!!!!!!'

另一个带字典的示例,显示其获取关键字参数的能力:

>>>my_dict = { 'adjective': 'cool', 'function':'format'}
>>>"Look how awesome my {adjective} Python {function} skills are!".format(**my_dict)
'Look how awesome my cool Python format skills are.'

Python docs中还有一些示例和用法。

答案 1 :(得分:1)

format功能更强大,正如您在其他答案中所看到的,您可以用它来做一些很酷的事情。但是,我想补充说格式不是最快的(至少在ubuntu 14.04的python 3.4中)。对于简单的格式化,加上表示法更快。例如:

import timeit


print(timeit.timeit("name = \"Doe\"; surname = \"John\"; 'He is {0} {1}'.format(surname, name)", number=100000))
# 0.04642631400201935

print(timeit.timeit("name = \"Doe\"; surname = \"John\"; \"He is\" + surname + \" \" + name", number=100000))
# 0.01718082799925469