Python 2.6引入了^{%
运算符略有不同。哪种情况更好?
下面使用的每种方法都有相同的结果,那么有什么区别呢?
#!/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中什么时候会出现字符串格式?例如,如果我的日志记录级别设置为HIGH,那么我是否仍会执行下面的%
操作?如果是的话,有没有办法避免呢?
log.debug("some debug info: %s" % some_info)
回答你的第一个问题。。。
.format
只是在很多方面看起来更复杂。关于%
的一个恼人的问题是它如何接受变量或元组。你会认为以下方法总是有效的:然而,如果
name
恰好是(1, 2, 3)
,它将抛出TypeError
。为了保证它总是打印出来,你需要真难看。
.format
没有这些问题。同样在您给出的第二个示例中,.format
示例看起来更干净。你为什么不使用它?
要回答您的第二个问题,字符串格式化与任何其他操作同时发生-当对字符串格式化表达式求值时。Python不是一种懒惰的语言,它在调用函数之前计算表达式,因此在
log.debug
示例中,表达式"some debug info: %s"%some_info
将首先计算为,例如"some debug info: roflcopters are active"
,然后该字符串将传递给log.debug()
。模运算符(%)不能做的事情,afaik:
结果
非常有用。
另一点:
format()
,作为一个函数,可以在其他函数中用作参数:结果:
假设您使用的是Python的
logging
模块,那么可以将字符串格式化参数作为参数传递给.debug()
方法,而不是自己进行格式化:这样可以避免格式化,除非记录器实际记录了一些内容。
相关问题 更多 >
编程相关推荐