rank vote url
70 354 145 282 url

字符串格式化:%和.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中格式化字符串什么时候执行?例如如果我的loggin的优先级设置为高,那么我还能用%操作符吗?如果是这样的话,有什么方法可以避免吗?

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


先回答第一个问题….format在许多方面看起来更便利.你可以重用参数,但是你用%就不行.最烦人的是%它无法同时传递一个变量和元组.你可能会想下面的代码不会有什么问题:

  1. "hi there %s" % name

但是,如果name恰好是(1,2,3),它将会抛出一个TypeError异常.为了保证它总是正确的,你必须这样做:

  1. "hi there %s" % (name,) # 提供一个单元素的数组而不是一个参数

但是有点丑..format就没有这些问题.你给的第二个问题也是这样,.format好看多了.

你为什么不用它?

  • 不知道它(在读这个之前)
  • 为了和Python2.5兼容
    回答你的第二个问题,字符串格式和其他操作一样发生在它们运行的时候.Python是非懒惰语言,在函数调用前执行表达式,所以在你的log.debug例子中,"some debug info: %s"%some_info将会先执行,先生成"some debug info: roflcopters are active",然后字符串将会传递给log.debug()

原文: https://taizilongxu.gitbooks.io/stackoverflow-about-python/content/70/README.html