【问题标题】:What's a standard way to do a no-op in python?在 python 中执行无操作的标准方法是什么?
【发布时间】:2009-03-27 17:04:19
【问题描述】:

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

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

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

【问题讨论】:

标签: python


【解决方案1】:

使用pass 表示无操作:

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

还有一个例子:

def f():
  pass

或者:

class c:
  pass

【讨论】:

  • 作为单行者,我使用doSQL = lambda *x:x
  • 您可以使用“None”代替“pass”,但它并不能说明任何代码。
  • 这是否支持三元运算,尤其是在else下?
  • @AlexejMagura 不,因为pass 不是一个值。我也看不出它有什么用处。
  • 两行代码——第一行编译失败,第二行没问题。如果你希望它有一个值,那么使用None,如果你不需要一个值,那么使用pass。 #a = pass # 无效语法; b = 无
【解决方案2】:

pass怎么样?

【讨论】:

    【解决方案3】:

    如果你需要一个像 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()
    

    【讨论】:

    【解决方案4】:

    您可以在标准输出中打印一个空字符串并且不换行。如果 linter 禁止您在不必要的情况下使用 pass,这可能会很方便,但您需要一行注释:

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

    使用这个空的print除了浪费CPU周期之外几乎没有副作用:

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

    请注意,在此处使用 pass 在语法上是正确的,但 linter 可能会抱怨:

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

    【讨论】:

      【解决方案5】:

      我桌上的一个简单练习只使用这样的一行:

      dummy = 0
      

      普通的编码人员(即使是来自其他常见编程语言的编码人员)会立即理解它。

      【讨论】:

        猜你喜欢
        • 2013-02-10
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 2021-08-23
        • 2012-10-15
        • 2012-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多