2017-02-12 37 views
1

Чтобы преобразовать число в строку в python, я использовал функцию str(), но несколько человек предложили вместо этого использовать format(). Когда я попробовал оба, я получил тот же результат:Почему str.format() лучше, чем str()?

n = 10 
print ['{}'.format(n)] # ['10'] 
print [str(n)] # ['10'] 

Есть ли существенная разница?

ответ

2

Пока str() предоставит вам строковое представление числа по умолчанию, str.format() позволяет указать способ форматирования.

Примеры:

>>> '{:.3f}'.format(3.141592653589793) # 3 decimal places 
'3.142' 

>>> '{:,d}'.format(1234567) # thousand separators 
'1,234,567' 


>>> '{:6d}'.format(10) # padded to six spaces 
' 10' 

>>> '{:05.2f}%'.format(8.497) # zero-padded, 2 decimal places 
'08.50%' 

>>> '{:^6d}'.format(10) # centered 
' 10 ' 

>>> '{:x}'.format(1597463007) # hexadecimal 
'5f3759df' 

Вы также можете указать строки формата с участием нескольких значений:

>>> 'Customer #{cust_id:08d} owes ${bal:,.2f}'.format(bal=1234.5, cust_id=6789) 
'Customer #00006789 owes $1,234.50' 

Там много различных вариантов для строк формата - полная ссылка here.

+1

И вы также можете иметь вложенные форматы: '' {:. {} F} '. Format (0.12345, 5) ->' 0.12345'' while ''{:. {} F}'. Format (0.12345) , 2) -> 0.12' – Bakuriu

0

Я буду немного смея с моим ответом .. :-)

Я не думаю, что str.format() лучше str(). str() короче, и если он дает вам то, что вы хотите, это здорово.

Если вам нужно отформатировать номер с количеством цифр, например, {}.format() выполнит эту работу, но также и '%.3f' % n выполнит эту работу.

Есть некоторые преимущества для {}.format() по сравнению с оператором %, и повторение аргумента является одним, но не столь распространенным. Я все еще использую %, потому что он короче.

Кажется, что сам Python постоянно ищет лучшие способы, и действительно, в Python 3.6 они придумали лучший способ, IMO, до сих пор, который является общим для некоторых языков программирования. Здесь, прямо из док:

>>> name = "Fred" 
>>> f"He said his name is {name}." 

Вы можете прочитать больше об этом здесь:

https://www.python.org/dev/peps/pep-0498/

+0

Согласен. Я все еще использую ℅ в py34, но как только я смогу использовать py36, я буду использовать тип f. Просто ожидая, когда cython уладит – Naib

0

Этот парень объясняет многие преимущества format над str: https://pyformat.info/

Однако, если вас беспокоит время, вы можете использовать str:

>>> import timeit 
>>> timeit.timeit('str(25)', number=10000) 
0.003485473003820516 
>>> timeit.timeit('"{}".format(25)', number=10000) 
0.00590304599609226 
>>> timeit.timeit('str([2,5])', number=10000) 
0.007156646002840716 
>>> timeit.timeit('"{}".format([2,5])', number=10000) 
0.017119816999183968 

 Смежные вопросы

  • Нет связанных вопросов^_^