不知道为什么这段代码有效(使用替代字典 class 和 __missing__ 方法)
Don't know why this code works (use alternative dictionary class with __missing__ method)
当我阅读 David Beazley, Brian K. Jones 的书 "Python cookbook",第 61、62 页时出现了这个问题。我总结:
>>> s = '{name} has {n} messages.'
>>> name = 'Guido'
>>> n = 37
现在,如果只想替换 {name},但不想替换 {n},请使用 __missing__()
方法定义替代字典 class
>>> class safesub(dict):
def __missing__(self, key):
return '{' + key + '}'
然后
>>> del n # Make sure n is undefined
>>> s.format_map(safesub(vars()))
你得到了想要的结果:
'Guido has {n} messages.'
我的问题:
为什么需要 __missing__()
方法来使此代码工作?
format_map()
将在其参数中查找键 'n'
。因为此密钥 缺失 ,它会在正常 dict
中引发 KeyError
。定义 __missing__
方法决定了这里会发生什么:返回 '{n}'
以便格式化的字符串保持不变。
当我阅读 David Beazley, Brian K. Jones 的书 "Python cookbook",第 61、62 页时出现了这个问题。我总结:
>>> s = '{name} has {n} messages.'
>>> name = 'Guido'
>>> n = 37
现在,如果只想替换 {name},但不想替换 {n},请使用 __missing__()
方法定义替代字典 class
>>> class safesub(dict):
def __missing__(self, key):
return '{' + key + '}'
然后
>>> del n # Make sure n is undefined
>>> s.format_map(safesub(vars()))
你得到了想要的结果:
'Guido has {n} messages.'
我的问题:
为什么需要 __missing__()
方法来使此代码工作?
format_map()
将在其参数中查找键 'n'
。因为此密钥 缺失 ,它会在正常 dict
中引发 KeyError
。定义 __missing__
方法决定了这里会发生什么:返回 '{n}'
以便格式化的字符串保持不变。