Python-字符串格式:%vs..format
Python 2.6引入的str.format()
方法与现有%运算符的语法略有不同。哪个更好,什么情况下适合?
以下使用每种方法并具有相同的结果,那么有什么区别?
#!/usr/bin/pythonsub1 = "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中进行字符串格式化?例如,如果我的日志记录级别设置为HIGH
,那么执行以下%
操作是否还会对我有所帮助?如果是这样,有办法避免这种情况吗?
log.debug("some debug info: %s" % some_info)
回答:
第一个问题... .format
在许多方面似乎都更加复杂。一个令人烦恼的事情%
是它如何可以接受变量或元组。你会认为以下各项将始终有效:
"hi there %s" % name
但是,如果name碰巧(1, 2, 3
),它将抛出一个TypeError
。为了确保它始终打印,你需要执行
"hi there %s" % (name,) # supply the single argument as a single-item tuple
真丑。.format没有那些问题。同样在你给出的第二个示例中,该.format示例看起来更加简洁。
为什么不使用它?
- 不知道(我在阅读本文之前)
- 必须与Python 2.5兼容
第二个问题,字符串格式化与其他任何操作都同时发生-计算字符串格式化表达式时。而且,Python并不是一种惰性语言,它会在调用函数之前先对表达式求值,因此在你的log.debug
示例中,表达式"some debug info: %s"%some_info
首先求值为"some debug info: roflcopters are active"
,然后将该字符串传递给log.debug()。
以上是 Python-字符串格式:%vs..format 的全部内容, 来源链接: utcz.com/qa/409857.html