| 導航:起始頁 > Dive Into Python > HTML 處理 > 基于 dictionary 的字符串格式化 | << >> | ||||
深入 Python :Dive Into Python 中文版Python 從新手到專家 [Dip_5.4b_CPyUG_Release] |
|||||
為什么學習 locals 和 globals?因為接下來就可以學習關于基于 dictionary 的字符串格式化。或許您還能記起,字符串格式化提供了一種將值插入字符串中的一種便捷的方法。值被列在一個 tuple 中,按照順序插入到字符串中每個格式化標記所在的位置上。盡管這種做法效率高,但還不是最容易閱讀的代碼,特別是當插入多個值的時候。僅用眼看一遍字符串,您不能馬上就明白結果是什么;您需要經常地在字符串和值的 tuple 之間進行反復查看。
有另外一種字符串格式化的形式,它使用 dictionary 而不是值的 tuple。
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> "%(pwd)s" % params'secret' >>> "%(pwd)s is not a good password for %(uid)s" % params
'secret is not a good password for sa' >>> "%(database)s of mind, %(database)s of body" % params
'master of mind, master of body'
那么為什么您偏要使用基于 dictionary 的字符串格式化呢?的確,僅為了進行字符串格式化,就事先創建一個有鍵字和值的 dictionary 看上去的確有些小題大作。它的真正最大用處是當您碰巧已經有了像 locals 一樣的有意義的鍵字和值的 dictionary 的時候。
def handle_comment(self, text):
self.pieces.append("<!--%(text)s-->" % locals())
def unknown_starttag(self, tag, attrs):
strattrs = "".join([' %s="%s"' % (key, value) for key, value in attrs])
self.pieces.append("<%(tag)s%(strattrs)s>" % locals())
當這個模塊被調用時,attrs 是一個鍵/值 tuple 的 list,就像一個 dictionary 的 items。這就意味著我們可以使用多變量賦值來遍歷它。到現在這將是一種熟悉的模式,但是這里有很多東西,讓我們分開來看:
|
|
| 現在,使用基于 dictionary 的字符串格式化,我們將 tag 和 strattrs 的值插入到一個字符串中。所以,如果 tag 是 'a',最終的結果會是 '<a href="index.html" title="Go to home page">',并且這就是追加到 self.pieces 后面的東西。 |
| 使用 locals 來應用基于 dictionary 的字符串格式化是一種方便的作法,它可以使復雜的字符串格式化表達式更易讀。但它需要花費一定的代價。在調用 locals 方面有一點性能上的問題,這是由于 locals 創建了局部名字空間的一個拷貝引起的。 | |
<< locals 和 globals |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
給屬性值加引號 >> |