2017-02-12 52 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

您還可以嵌套格式:格式(0.12345,5) - >'0.12345',而格式爲{{。{} f}'。 ,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中使用but,但是一旦我可以使用py36,我將使用f類型。只是在等待cython解決 – Naib

0

這傢伙解釋了strformat的許多優點: 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 
相關問題