也许我被品牌X编程语言宠坏了,但下面有更好的pythonic成语吗?
thing_dict = {}
def find_or_create_thing(key):
if (thing_dict.has_key(key)):
thing = thing_dict[key]
else:
thing = create_new_thing(key)
thing_dict[key] = thing
return thing
似乎这样的事情可以用一两行完成。我考虑使用Conditional Expression,但Python的奇怪语法根本不具备易读性。
我还考虑了try: ... except KeyError:
,但这只是文本的数量,可能还有更多的执行开销。
P.S。我知道在S.O.上提出编程风格的问题。是有问题的,但我会抓住机会......
答案 0 :(得分:1)
使用in
更多Pythonic
thing_dict = {}
def find_or_create_thing(key):
if not key in thing_dict:
thing_dict[key] = create_new_thing(key)
return thing_dict[key]
如果你绝对需要两行的功能:
thing_dict = {}
def find_or_create_thing(key):
if not key in thing_dict: thing_dict[key] = create_new_thing(key)
return thing_dict[key]
答案 1 :(得分:1)
不短,但可能更漂亮" (取决于用例):
class ThingDict(dict):
def __missing__(self, key):
self[key] = create_new_thing(key)
return self[key]
thing_dict = ThingDict()
def find_or_create_thing(key):
return thing_dict[key]