Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 代码样式-用于使用if_Python_Coding Style - Fatal编程技术网

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()):