这里有困惑的新手。使用之间的区别是什么:
print ("So you are {0} years old".format(age))
和
print ("So you are", age, "years old")
两者都有效。
答案 0 :(得分:7)
实际上存在巨大差异。前者使用字符串的format
方法来创建字符串。后者将几个参数传递给print
函数,它们将它们连接起来,在它们之间添加一个空格(默认)。
前者功能更强大,例如,您可以使用the format syntax来完成以下操作:
# trunc a float to two decimal places
>>> '{:.2f}'.format(3.4567)
'3.46'
# access an objects method
>>> import math
>>> '{.pi}'.format(math)
'3.141592653589793'
它类似于早期版本的python中使用printf
运算符的%
样式格式:(即:"%d" % 3
)现在推荐str.format()
而不是%
1}}运算符,是Python 3中的新标准。
答案 1 :(得分:2)
>>> class Age:
... def __format__(self, format_spec):
... return "{:{}}".format("format", format_spec)
... def __str__(self):
... return "str"
...
>>> age = Age()
>>> print(age)
str
>>> print("{:s}".format(age))
format
format()
允许使用format_spec
指定的不同表示将同一对象转换为字符串。如果未定义前者,则print
会使用__str__
或__repr__
。 format()
如果未定义__str__
,也可以使用__repr__
,__format__
。
在Python 2中,您还可以定义__unicode__
方法:
>>> class U:
... def __unicode__(self):
... return u"unicode"
... def __str__(self):
... return "str"
... def __repr__(self):
... return "repr"
...
>>> u = U()
>>> print(u"%s" % u)
unicode
>>> print(u)
str
>>> print(repr(u))
repr
>>> u
repr
Python 3中还有ascii()
内置函数,其行为类似repr()
,但只生成ascii结果:
>>> print(ascii(""))
'\U0001f40d'
请参阅U+1F40D SNAKE。
format()
使用Format Specification Mini-Language而不是运行各种转换为字符串函数。
对象可能会发明自己的format_spec
语言,例如,datetime
允许使用strftime
格式:
>>> from datetime import datetime
>>> "{:%c}".format(datetime.utcnow())
'Sun May 4 18:51:18 2014'
答案 2 :(得分:0)
前者更方便。想象一下,如果你有很多参数,你最终会得到这样的结论:
print ("So your name is ", firstname, " ", lastname, " and you are ", age, " years old")
这对读写都很痛苦。因此格式化方法可以帮助您编写更清晰,更易读的字符串。