Python中字符串格式化:%和format
程序员文章站
2022-07-15 08:37:03
...
Python2.6推出了[str.format()]方法,和原有的%格式化方式有小小的区别。那个方法更好?
-
下面的方法有同样的输出,它们的区别是什么?
#!/usr/bin/python sub1 = "python string!" sub2 = "an arg" a = "i am a %s" % sub1 b = "i am a {0}".format(sub1) c = "with %(kwarg)s!" % {'kwarg':sub2} d = "with {kwarg}!".format(kwarg=sub2) print a # "i am a python string!" print b # "i am a python string!" print c # "with an arg!" print d # "with an arg!"
-
另外在Python中格式化字符串什么时候执行?例如如果我的loggin的优先级设置为高,那么我还能用
%
操作符吗?如果是这样的话,有什么方法可以避免吗?log.debug("some debug info: %s" % some_info)
问题源于:Python string formatting: % vs. .format - Stack Overflow。
第一个问题:
format
在许多方面看起来更便利。你可以重用参数,但是你用%
就不行。最烦人的是%
它无法同时传递一个变量和元组。你可能会想下面的代码不会有什么问题:
"hi there %s" % name
但是,如果name
恰好是(1,
2, 3)
,它将会抛出一个TypeError
异常。
>>> name = (1, 2, 3)
>>> "hi there %s" % name
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
>>>
为了保证它总是正确的,你必须这样做:
>>> "hi there %s" % (name,) # 提供一个单元素的数组而不是一个参数
'hi there (1, 2, 3)'
>>>
但是有点丑,format
就没有这些问题。你给的第二个问题也是这样,format
好看多了。
你为什么不用它?
- 不知道它(在读这个之前)
- 为了和Python2.5兼容
第二个问题:
字符串格式和其他操作一样发生在它们运行的时候。Python是非懒惰语言,在函数调用前执行表达式,所以在你的log.debug
例子中,"some
debug info: %s"%some_info
将会先执行,先生成"some debug info: roflcopters are active"
,然后字符串将会传递给log.debug()
。
上一篇: Python1.输入与输出
下一篇: python之format 字符串格式化