最近我一直在做很多基于音乐的编程,因此我发现自己在处理某些歌曲中缺少的元数据方面做了很多这样的事情:
default = {'title': 'Unknown title', 'artist': 'unknown Artist'}
default.update(song)
print '{title} - {artist}'.format(**default)
Run Code Online (Sandbox Code Playgroud)
有更清洁的方法吗?我尝试覆盖__missing__,但缺少键仍然会引发KeyError:
class Song(dict):
# dictionary with some nice stuff to make it nicer
def __missing__(self, key):
return 'Unknown {key}'.format(key = key)
Run Code Online (Sandbox Code Playgroud)
编辑:对不起,我应该更清楚,基本上以下必须工作.
s = Song()
print '{notAKey}'.format(s)
Run Code Online (Sandbox Code Playgroud)
有几个人指出**是没有必要的.
编辑2:我"解决"了我的问题,至少让我感到满意.这是否更清洁是有争议的,但它对我有用.
from string import Formatter
class DefaultFormatter(Formatter):
def get_value(self, key, args, kwargs):
# Try standard formatting, then return 'unknown key'
try:
return Formatter.get_value(self, key, args, kwargs)
except KeyError:
return kwargs.get(key, 'Unknown {0}'.format(key))
class Song(dict):
def format(self, formatString):
# …Run Code Online (Sandbox Code Playgroud) 我依旧记得学习某种类似于内置功能的内置功能
f = lambda x: x.attr
Run Code Online (Sandbox Code Playgroud)
我只是想象这个或存在这样的事情吗?