我经常发现自己在python中编写if / elif / else结构,并且我希望包含可能发生的选项,但相应的操作是不做任何事情。我意识到我可以排除这些if语句,但为了可读性,我发现将它们都包括在内很有帮助,所以如果你在查看代码,你可以看到每个选项的结果。我该如何对“不行动”进行编码?目前,我是这样做的:

no_op = 0

if x == 0:
    y = 2 * a
elif x == 1:
    z = 3 * b
elif x == 3:
    no_op

(代码实际上比这长一些,也更复杂。这只是为了说明结构)。

我不喜欢使用变量作为无操作,但这是我能想到的最简洁的方法。有没有更好的办法?


当前回答

no-op使用pass:

if x == 0:
  pass
else:
  print "x not equal 0"

这里还有一个例子:

def f():
  pass

Or:

class c:
  pass

其他回答

如果您需要一个表现为nop的函数,请尝试一下

nop = lambda *a, **k: None
nop()

有时候,当我将依赖项设置为可选时,我会这样做:

try:
    import foo
    bar=foo.bar
    baz=foo.baz
except:
    bar=nop
    baz=nop

# Doesn't break when foo is missing:
bar()
baz()

由于不带参数的“返回”显然是一个无操作,在某些代码下,它让我在Python中分析一些混淆的“病毒”时被丢弃了一段时间。

在我的桌子上有一个简单的练习,就是用这样的句子:

dummy = 0

普通的编码器(甚至那些来自其他通用编程语言的编码器)会立即理解它。

可以将空字符串和不换行输出到标准输出。如果linter禁止你在不必要的地方使用pass,这可能很方便,但你需要一行注释:

print('', end='')  # This does next to nothing

使用这个空打印除了浪费CPU周期外,副作用很少:

$ echo "print('', end='')  # This does next to nothing" > main.py
$ python3 main.py
$ 

注意在这里使用pass在语法上是正确的,但是linters可能会抱怨:

$ echo "pass  # This does next to nothing" > main.py
$ python3 main.py
$ 

及格怎么样?