您认为三者中的哪一种是更好的编码风格,还是更具可读性?应该对两个词典中的项目运行foo
,但mydict2
可以是None
选项1:
for a,b in mydict1.items():
foo(a,b)
if mydict2:
for a,b in mydict2.items():
foo(a,b)
选项2:
for a,b in mydict1.items():
foo(a,b)
for a,b in mydict2.items() if mydict2 else dict().items():
foo(a,b)
选项3:
for a,b in chain(mydict1.items(), mydict2.items() if mydict2 else dict().items()):
foo(a,b)
答案 0 :(得分:6)
请尽早检测旁边情况,并将其替换为空字典 - 这是null object pattern:
if mydict2 is None:
mydict2 = {}
这与用于避免可变默认参数的常见模式相同。然后你总是可以有一个(非常简单的)循环:
for a, b in chain(mydict.items(), mydict2.items()):
如果您控制相关代码,请考虑更改内容,以便mydict2
首先不能None
。
答案 1 :(得分:2)
我喜欢第三种选择,因为单循环使程序的意图更清晰。如果是我,我会做一个辅助发电机,为了分离问题。
def mydictitems(*dicts):
for d in dicts:
if d:
yield from d.items()
for a,b in mydictitems(mydict1, mydict2):
foo(a,b)