Python中字符串格式化:%和format
Python2.6推出了[str.format()]方法,和原有的%格式化方式有小小的區(qū)別。那個(gè)方法更好?
下面的方法有同樣的輸出,它們的區(qū)別是什么?
#!/usr/bin/pythonsub1 = "python string!"sub2 = "an arg"a = "i am a %s" % sub1b = "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中格式化字符串什么時(shí)候執(zhí)行?例如如果我的loggin的優(yōu)先級(jí)設(shè)置為高,那么我還能用%操作符嗎?如果是這樣的話,有什么方法可以避免嗎?
log.debug("some debug info: %s" % some_info)問題源于:Python string formatting: % vs. .format - Stack Overflow。
第一個(gè)問題:
format在許多方面看起來更便利。你可以重用參數(shù),但是你用%就不行。最煩人的是%它無法同時(shí)傳遞一個(gè)變量和元組。你可能會(huì)想下面的代碼不會(huì)有什么問題:
"hi there %s" % name但是,如果name恰好是(1, 2, 3),它將會(huì)拋出一個(gè)TypeError異常。
name = (1, 2, 3) "hi there %s" % name Traceback (most recent call last):File "<stdin>", line 1, in <module> TypeError: not all arguments converted during string formatting >>>為了保證它總是正確的,你必須這樣做:
"hi there %s" % (name,) # 提供一個(gè)單元素的數(shù)組而不是一個(gè)參數(shù) 'hi there (1, 2, 3)' >>>但是有點(diǎn)丑,format就沒有這些問題。你給的第二個(gè)問題也是這樣,format好看多了。
你為什么不用它?
- 不知道它(在讀這個(gè)之前)
- 為了和Python2.5兼容
第二個(gè)問題:
字符串格式和其他操作一樣發(fā)生在它們運(yùn)行的時(shí)候。Python是非懶惰語言,在函數(shù)調(diào)用前執(zhí)行表達(dá)式,所以在你的log.debug例子中,"some debug info: %s"%some_info將會(huì)先執(zhí)行,先生成"some debug info: roflcopters are active",然后字符串將會(huì)傳遞給log.debug()。
總結(jié)
以上是生活随笔為你收集整理的Python中字符串格式化:%和format的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux命令行配置静态IP地址
- 下一篇: 利用python寻找列表中相邻元素之差绝