Pythonで何もしない標準的な方法は何ですか?


160

if / elif / elseをPythonで作成することがよくあります。発生する可能性があるオプションを含めたいのですが、対応するアクションでは何も行われません。これらのifステートメントを除外することもできると思いますが、読みやすくするために、それらすべてを含めると役立つので、コードを調べれば、各オプションの結果として何が起こるかを確認できます。no-opのコーディング方法を教えてください。現在、私は次のようにしています:

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

回答:


288

no-opにパスを使用:

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
「pass」の代わりに「None」を使用することもできますが、コードは明確化されていません。
DevPlayer

これは、特に以下の3項演算でサポートされelseますか?
Alexej Magura

2
@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()

1
これは、nop特に式を必要とするコンテキスト(任意のステートメントではなく、qv docs.python.org/3/reference/simple_stmts.htmlおよびdocs.python.org/3/reference/compound_stmts。 html)–たとえば、内包表記のような既存のコードイディオムのサブ式としてlambda、または(または禁止されている)文字列に渡される文字列eval(…)(qv docs.python.org/3/library/functions.html#必要な場合はeval)。
fish2000

を使用lambdaして関数を変数に割り当てて再利用するのは、コーディングスタイルが悪い。そのdefためです。
バクサウ

0

もう1つの方法はEllipsisです。

def foo():
    ...

それは、他のオブジェクトに名前を付けることと同じです。つまりこのように書くこともできNone136または"NothingHere"。しかし、Pythonの正しいfillgapはpassです。
バクサウ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.