【问题标题】:Python 3: using %s and .format()Python 3:使用 %s 和 .format()
【发布时间】:2013-02-07 14:45:24
【问题描述】:

我终于在我的 2.x 代码中从 % 切换到 .format() 字符串格式化运算符,以便将来更容易迁移到 3.x。发现不仅% 风格的格式不仅保留在 Py3 中,而且在标准库代码中被广泛使用,这有点令人惊讶。这似乎是合乎逻辑的,因为写'(%s)' % variable'({})'.format(variable) 要短一些,而且可能更容易理解。但我仍然有疑问。在代码中使用这两种方法是否合适(pythonic?)? 谢谢。

【问题讨论】:

  • % 格式化稍微快一些。但是,如果您要进行重要的字符串格式化,那么您可能还有其他更重要的问题。

标签: python string string-formatting


【解决方案1】:

Python 3.2 文档说,% 最终会消失。

http://docs.python.org/3.2/tutorial/inputoutput.html#old-string-formatting

由于str.format()比较新,很多Python代码仍然使用% 操作员。但是,因为这种旧式格式将 最终从语言中删除,str.format() 通常应该 使用。

但作为@regilero says句子从 3.3 中消失了,这可能表明事实并非如此。有一些对话here 暗示了同样的事情。

Python 3.4 the paragraph 7.1.1 的内容如下:

% 运算符也可用于字符串格式化。它解释 左边的参数很像一个 sprintf() 样式的格式字符串 应用于正确的参数,并返回产生的字符串 这个格式化操作。

另见Python 3.4 4.7.2 printf-style String Formatting.

【讨论】:

  • 非常感谢您的回复,弗拉德。确实,他们在文档中这么说,但即使是 3.x 的标准库也充斥着类似% 的格式:( 似乎根本没有太多摆脱% 的迹象。无论如何,坚持.format() 似乎是对的:)
  • 这句话在python 3.3文档中已经被删除,在3.2中仍然存在docs.python.org/3.2/tutorial/…
  • 只是出于好奇,旧的会被弃用吗?
  • 我刚刚测试了bar = "baz"; print("foo %s" % bar),它仍然可以在 Python 3.4.3(以及 2.7.3 和 2.6.6)中运行
【解决方案2】:

“%s”现在是“{}”,所以如果要添加 %s,请将其替换为 {},您希望将变量添加到字符串中。

def main():
    n="Python 3.+" 
    l="looks nice"
    f="does not look practical."


    print("This seems to be the new way {}".format(n)\
      + "will be working, rather than the ' % ',{} but {}".format(l,f))



main()

#In comparison to just injecting the variable

出于说明原因,输出忽略引号

“这似乎是“Python 3.+”的新方式 将工作,而不是 '%;,“看起来不错”但“看起来不实用”。”

【讨论】:

    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多