Python 为什么我会使用“引用”;。格式();而不是",+&引用;?

Python 为什么我会使用“引用”;。格式();而不是",+&引用;?,python,string,formatting,Python,String,Formatting,我想知道为什么我应该使用这样的东西: 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) >>>

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

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
是一个函数,您可以在需要时将其作为参数传递。在Python3中,它被称为,因为它比简单的串联功能强大得多


如果您真的想使用
.format
函数,也可以做一些非常随意和灵活的事情,例如:

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

还有一些更进一步的例子和用法。

格式更强大,正如你在另一个答案中所看到的,你可以用它做很多很酷的事情。然而,我想补充的是,这种格式并不是最快的(至少在ubuntu 14.04上的Python3.4中是如此)。对于简单的格式,plus表示法更快。例如:

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

更具可读性和更具python风格。:)如果你想打印的是混合字体,那么打印也会方便得多。因为语序可以在不同语言之间变化,所以本地化会容易得多。
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