字符串格式:%vs..format

  • 问题:
  • 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中何时进行字符串格式化?例如,如果我的日志记录级别设置为高,我是否仍会因为执行以下%操作而受到影响?如果是这样,有没有办法避免这种情况?在

    log.debug("some debug info: %s" % some_info)

  • 答案:
  • 回答你的第一个问题。。。。格式在许多方面似乎更为复杂。关于%的一个恼人的事情是它可以接受一个变量或一个元组。你会认为以下方法总是有效的:

    "hi there %s" % name

    但是,如果名称恰好是(1,2,3),它将抛出一个TypeError。为了保证它总是打印出来,你需要

    "hi there %s" % (name,)   # supply the single argument as a single-item tuple

    太难看了。.format没有这些问题。同样在您给出的第二个示例中,.format示例看起来更干净

    你为什么不使用它?在

    要回答您的第二个问题,字符串格式设置与任何其他操作同时发生-在计算字符串格式表达式时。Python不是一种懒惰的语言,它在调用函数之前计算表达式,所以在日志.调试例如,表达式“some debug info:%s”%some\u info将首先计算为,例如“some debug info:roflcopters are active”,然后该字符串将被传递到日志.调试()。在