您现在的位置:首页 > 深入 Python > HTML 处理 > 基于字典的字符串格式化 | << >> | ||||
深入 Python从 Python 新手到专家 |
为什么要学习 locals 和 globals?为了学习基于字典的字符串格式化。回想一下,常规字符串格式化 提供了一种将值插入字符串的简单方法。值列在一个元组中,并按顺序插入到字符串中每个格式标记的位置。虽然这很有效,但它并不总是最容易阅读的代码,尤其是在插入多个值时。您不能简单地一次性浏览字符串并理解结果是什么;您需要不断地在阅读字符串和阅读值元组之间切换。
有一种替代形式的字符串格式化,它使用字典而不是值元组。
>>> 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'
那么为什么要使用基于字典的字符串格式化呢?好吧,为了在下一行进行字符串格式化而设置键和值字典似乎有点小题大做;当您碰巧已经有一个包含有意义的键和值的字典时,它才真正有用。比如 locals。
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 是一个键/值元组列表,就像 字典的 items 一样,这意味着您可以使用 多变量赋值 来迭代它。这现在应该是一个熟悉的模式了,但这里有很多内容,所以让我们把它分解一下
|
![]() |
现在,使用基于字典的字符串格式化,您可以将 tag 和 strattrs 的值插入到字符串中。因此,如果 tag 是 'a',则最终结果将是 '<a href="index.html" title="Go to home page">',这就是追加到 self.pieces 的内容。 |
![]() |
|
将基于字典的字符串格式化与 locals 一起使用是使复杂的字符串格式化表达式更具可读性的一种便捷方法,但它是有代价的。调用 locals 会稍微影响性能,因为 locals 会构建 局部命名空间的副本。 |
<< locals 和 globals |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
属性值的引用 >> |