Python 代码样式-用于使用if
您认为这三种编码风格中哪一种更好,或者更具可读性Python 代码样式-用于使用if,python,coding-style,Python,Coding Style,您认为这三种编码风格中哪一种更好,或者更具可读性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 my
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)
我喜欢第三个选项,因为单循环使程序的意图更清晰。如果是我,为了分离关注点,我会制作一个助手生成器
def mydictitems(*dicts):
for d in dicts:
if d:
yield from d.items()
for a,b in mydictitems(mydict1, mydict2):
foo(a,b)
尽早检测侧箱,并将其替换为空dict-这是: 这与用于避免可变默认参数的常见模式相同。然后,您总是可以有一个(非常简单的)循环:
如果您控制相关代码,请考虑更改内容,以便<代码> MyDrase2/代码>不能是“代码>没有< /COD>”。p> 你知道迭代
mydict2.items()
如果它是空的,就什么也做不了?“三元表达式是完全冗余的。@jonsharpe,但OP说它可能是None
。试图在None
上迭代会抛出一个错误。@如果mydict2不是None
if mydict2 is None:
mydict2 = {}
for a, b in chain(mydict.items(), mydict2.items()):