我不知道format()和...(python)之间的区别

时间:2014-05-04 16:39:39

标签: python string variables python-3.x

这里有困惑的新手。使用之间的区别是什么:

print ("So you are {0} years old".format(age))

print ("So you are", age, "years old")

两者都有效。

3 个答案:

答案 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")

这对读写都很痛苦。因此格式化方法可以帮助您编写更清晰,更易读的字符串。