为什么我会使用“.format()”而不是“+”?
Why I would use ".format()" instead of "+"?
我想知道为什么我应该使用这样的东西:
name = "Doe"
surname = "John"
print("He is {0} {1}".format(surname, name))
而不是:
name = "Doe"
surname = "John"
print("He is" + surname + " " + name)
对于初学者,尝试使用 +
:
>>> 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.'
中还有一些进一步的示例和用法
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
我想知道为什么我应该使用这样的东西:
name = "Doe"
surname = "John"
print("He is {0} {1}".format(surname, name))
而不是:
name = "Doe"
surname = "John"
print("He is" + surname + " " + name)
对于初学者,尝试使用 +
:
>>> 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.'
中还有一些进一步的示例和用法
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