为什么str.format()比str()更好?

时间:2017-02-12 07:24:03

标签: python string python-2.7 format string-formatting

要在python中将数字转换为字符串,我使用了str()函数,但有些人建议我改用format()。当我尝试两者时,我得到了相同的结果:

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

有什么显着差异吗?

3 个答案:

答案 0 :(得分: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)

我的回答会有点大胆......: - )

我认为str.format()不比str()好。 str()更短,如果它能满足您的需求,那就太棒了。

如果您需要使用位数格式化数字,例如,{}.format()将完成工作,'%.3f' % n也可以完成工作。

{}.format()运算符相比,%有一些优点,重复一个参数是一个,但不常见。我仍然使用%,因为它更短。

似乎Python本身不断寻求更好的方法,事实上在Python 3.6中,他们提出了迄今为止最好的方法IMO,这对于某些编程语言来说很常见。在这里,直接来自doc:

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

您可以在此处详细了解:

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

答案 2 :(得分: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