2017-02-12 50 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 
相关问题