代码风格 - 用于with i

2024-04-20 13:43:11 发布

您现在位置:Python中文网/ 问答频道 /正文

您认为这三种编码方式中哪一种更好,或者更具可读性?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)

Tags: innonechainforif字典foo方案
2条回答

尽早检测副词,并用空dict替换它-这是null object pattern

if mydict2 is None:
     mydict2 = {}

这与用于避免可变默认参数的常见模式相同。然后你可以有一个(非常简单的)循环:

for a, b in chain(mydict.items(), mydict2.items()):

如果您控制相关的代码,请考虑更改某些内容,使mydict2首先不能是None。你知道吗

我喜欢第三个选项,因为单循环使程序的意图更加清晰。如果是我,我会做一个助手生成器,以分离关注点。你知道吗

def mydictitems(*dicts):
    for d in dicts:
         if d:
              yield from d.items()

for a,b in mydictitems(mydict1, mydict2):
    foo(a,b)

相关问题 更多 >