2015-03-26 2 views
1

мне было интересно, почему я должен использовать что-то вроде этого:Почему я использовал бы «.format()» вместо «+»?

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

Вместо:

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

Более читаемый и более питонический. :) – Zizouz212

+0

также намного удобнее, если вы хотите напечатать смешанные типы –

+0

Это может сделать локализацию намного проще, поскольку порядок слов может меняться между языками. – Phylogenesis

ответ

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

format намного более мощный, и, как вы можете видеть в другом ответе, вы можете делать с ним лут классных вещей. Однако я хотел бы добавить, что формат не самый быстрый (по крайней мере, в python 3.4 на ubuntu 14.04). Для простого форматирования плюс нотация выполняется быстрее. Например:

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 
Смежные вопросы