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

esf*_*sef 2 python string formatting

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

name = "Doe"
surname = "John"
print("He is {0} {1}".format(surname, name))
Run Code Online (Sandbox Code Playgroud)

代替:

name = "Doe"
surname = "John"
print("He is" + surname + " " + name) 
Run Code Online (Sandbox Code Playgroud)

mir*_*ulo 6

对于初学者,尝试这样做+:

>>> concatenate_me = (1,2,99999,100,600, 80)
>>>'{0} {0} {2} {2} {1} {2} {3} {5} {5} {4} {0} {2}'.format(*concatenate_me)
Run Code Online (Sandbox Code Playgroud)

.format() 好处:

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

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

另外,.format是一个函数,您可以在需要时将其作为参数传递.在Python 3中,它被称为高级字符串格式,因为它比简单连接更强大.


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

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

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

>>>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.'
Run Code Online (Sandbox Code Playgroud)

Python文档中还有一些示例和用法.