我想知道为什么我应该使用这样的东西:
name = "Doe"
surname = "John"
print("He is {0} {1}".format(surname, name))
而不是:
name = "Doe"
surname = "John"
print("He is" + surname + " " + name)
答案 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