Python2.6+ 增加了str.format函数,用来代替原有的'%'操作符。它使用比'%'更加直观、灵活。下面详细介绍一下它的使用方法。
下面是使用'%'的例子:
"""PI is %f..." % 3.14159 # => 'PI is 3.141590...'"%d + %d = %d" % (5, 6, 5+6) # => '5 + 6 = 11'"The usage of %(language)s" % {"language": "python"} # => 'The usage of python'
格式很像C语言的printf是不是?由于'%'是一个操作符,只能在左右两边各放一个参数,因此右边多个值需要用元组或者字典来包括,不能元组字典一起用,缺乏灵活度。
同样的例子用format方法改写:
"PI is {0}...".format(3.14159) # => 'PI is 3.14159...'"{0} + {1} = {2}".format(5, 6, 5+6) # => '5 + 6 = 11'"The usage of {language}".format(language = "Python") # => 'The usage of Python'
是不是很直观?(当然,使用C语言的我也很喜欢前一种格式表达方式 :-) )
格式化字符串
"{named} consist of intermingled character {0} and {1}".format("data", "markup", / named = "Formats trings")format(10.0, "7.3g") # => ' 10'"My name is {0} :-{{}}".format('Fred') # => 'My name is Fred :-{}'
注意第一行的'/',如果一个语句要换行,必须在结尾加上反斜线转义。
用'%'无法像这样将元组和字典混用。其实这里是命名参数,Python的一个特性。可以在定义数组的时候用*args, **kwargs语法展开集合和字典。需要注意,命名参数放在后面。
第二个语句表示format内置函数用来格式化单个值。
第三个语句表示了{}的转义,因为{}在被格式化字符串里是特殊字符,不能直接显示。转义方式是多嵌套一层。
使用属性和索引
"My name is {0.name}".format(open('out.txt', 'w')) # => 'My name is out.txt'
'{0.name}' 相当于调用对象的属性 open('out.txt', 'w').name
"My name is {0[name]}".format(dict(name='Fred')) # => 'My name is Fred'
使用索引也是可以的。
obj[key] 相当于 obj.____getitem____('key')
标准说明符(Specifiers)
写过C语言的程序员应该清楚printf的复杂。format也定义了很多标准的说明符,用来解释一个值的格式,然后插入字符串内。例如:
"My name is {0:8}".format('Fred') # => 'My name is Fred '
':'之后便是说明符了,上面例子中说明符只有一个'8'(minimumwidth),它表示插入的值宽度至少为8。'Fred'只有4,所以又加了4个空格。
说明符的详细格式为:
[[fill]align][sign][#][0][minimumwidth][.precision][type]
(不比C的printf更简洁啊!)
注意:'[]'表示该元素可选。所以,所有的格式说明符都是可选的!就像之前的例子,几乎都没有用这个(只是为了例子更清晰)。实际上,这些是很有用的。
新闻热点
疑难解答