在python中执行无操作的标准方法是什么?


160

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

(代码实际上比这更长,并且更加复杂。这只是为了说明结构)。

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


1
这个省略号(...)也值得一提:stackoverflow.com/a/6189281/38281
Patrick

Answers:


288

对不操作使用通行证

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

这是另一个示例:

def f():
  pass

要么:

class c:
  pass

3
作为单线工作,我使用doSQL = lambda *x:x
Cees Timmerman 2014年

2
您可以使用“ None”代替“ pass”,但是它不会澄清任何代码。
DevPlayer 2015年

三元运算是否支持此功能,尤其是在以下情况下else
Alexej Magura

1
@AlexejMagura不,因为pass这不是值。我也看不到它怎么有用。
L3viathan


12

如果您需要一个表现为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()

当一个人nop在一个特别需要表达式的上下文中需要时(相对于一个任意语句; qv docs.python.org/3/reference/simple_stmts.htmldocs.python.org/3/reference/compound_stmts),这是一个很好的解决方法。 html)–例如作为现有代码惯用法的子表达式(如理解),或a lambda,或(禁止使用)要传入的字符串eval(…)(qv docs.python.org/3/library/functions.html#评估(如果需要)。
fish2000

使用lambda的功能分配给一个变量回用是坏的编码风格。有def那个。
巴绍

0

另一种方法是使用省略号:

def foo():
    ...

这并不比仅命名任何其他对象更好。你也可以写None136"NothingHere"。但是python中正确的fillgap是pass
巴绍
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.