【发布时间】:2011-07-02 05:35:13
【问题描述】:
Python 2.6 引入了 str.format() 方法,其语法与现有的 % 运算符略有不同。哪个更好,适用于什么情况?
Python 3.6 现在通过语法f"my string" 引入了另一种字符串格式化格式的字符串文字(又名“f”字符串)。此格式选项是否比其他格式选项更好?
-
以下使用每种方法,结果都一样,那么有什么区别呢?
#!/usr/bin/python sub1 = "python string!" sub2 = "an arg" sub_a = "i am a %s" % sub1 sub_b = "i am a {0}".format(sub1) sub_c = f"i am a {sub1}" arg_a = "with %(kwarg)s!" % {'kwarg':sub2} arg_b = "with {kwarg}!".format(kwarg=sub2) arg_c = f"with {sub2}!" print(sub_a) # "i am a python string!" print(sub_b) # "i am a python string!" print(sub_c) # "i am a python string!" print(arg_a) # "with an arg!" print(arg_b) # "with an arg!" print(arg_c) # "with an arg!" -
此外,Python 中何时会出现字符串格式化?例如,如果我的日志记录级别设置为 HIGH,我仍然会因为执行以下
%操作而受到打击吗?如果是这样,有没有办法避免这种情况?log.debug("some debug info: %s" % some_info)
【问题讨论】:
-
对于初学者:这里有一个very nice tutorial 教授两种风格。我个人更经常使用旧的
%样式,因为如果您不需要format()样式的改进功能,%样式通常更方便。 -
供参考:newer
format()formatting style 和 older%-based formatting style 的 Python 3 文档。 -
回答您的第二个问题,从 3.2 开始,如果您使用自定义格式化程序,则可以使用 {} 格式(请参阅docs.python.org/3/library/logging.html#logging.Formatter)
标签: python performance logging string-formatting f-string