我经常发现自己在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

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

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


当前回答

及格怎么样?

其他回答

及格怎么样?

... (builtins.ellipsis)没有作为在表达式上下文中传递的可行替代方案被提及。

def f(condition: bool) -> None:
    if condition:
        print("hello ", end="")
    else:
        pass  # noop

    print("world") if condition else ...


f(False)  # ''
f(True)   # 'hello world'

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中分析一些混淆的“病毒”时被丢弃了一段时间。