Apa cara standar untuk melakukan larangan menggunakan python?

160

Saya sering menemukan diri saya menulis jika / elif / else dibangun dengan python, dan saya ingin memasukkan opsi yang dapat terjadi, tetapi untuk itu tindakan yang sesuai adalah tidak melakukan apa-apa. Saya menyadari bahwa saya hanya bisa mengecualikan pernyataan if, tetapi untuk keterbacaan saya merasa membantu untuk memasukkan semuanya, sehingga jika Anda melihat melalui kode Anda dapat melihat apa yang terjadi sebagai hasil dari setiap opsi. Bagaimana cara saya mengkode no-op? Saat ini, saya melakukannya seperti ini:

no_op = 0

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

(Kode sebenarnya sedikit lebih lama dari itu, dan lebih rumit. Ini hanya untuk menggambarkan struktur).

Saya tidak suka menggunakan variabel sebagai no-op, tapi itu cara paling rapi yang bisa saya pikirkan. Apakah ada cara yang lebih baik?

Ben
sumber
1
Ellipsis ini ( ...) juga layak disebutkan: stackoverflow.com/a/6189281/38281
Patrick

Jawaban:

288

Gunakan pass untuk no-op:

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

Dan inilah contoh lain:

def f():
  pass

Atau:

class c:
  pass
Brian R. Bondy
sumber
3
Sebagai one-liner, saya menggunakan doSQL = lambda *x:x.
Cees Timmerman
2
Anda dapat menggunakan "Tidak Ada" sebagai pengganti "pass" tetapi tidak menjelaskan kode apa pun.
DevPlayer
Apakah ini didukung untuk operasi ternary, khususnya di bawah else?
Alexej Magura
2
@AlexejMagura Tidak, karena passbukan nilai. Saya juga tidak bisa melihat bagaimana ini bisa berguna.
L3viathan
25

Bagaimana dengan pass?

Johan Kotlinski
sumber
12

Jika Anda memerlukan fungsi yang berfungsi sebagai nop, coba

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

Terkadang saya melakukan hal-hal seperti ini ketika saya membuat dependensi opsional:

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

# Doesn't break when foo is missing:
bar()
baz()
Andrew Wagner
sumber
1
Ini adalah solusi yang baik ketika seseorang membutuhkan nopdalam konteks yang secara khusus membutuhkan ekspresi (versus pernyataan sewenang-wenang; qv docs.python.org/3/reference/simple_stmts.html dan docs.python.org/3/reference/compound_stmts. html ) - seperti misalnya sebagai sub-ekspresi ke idiom kode yang ada seperti pemahaman, atau lambda, atau (tuhan melarang) string yang akan dilewatkan ke eval(…)(yang qv docs.python.org/3/library/functions.html# eval jika Anda harus).
fish2000
Menggunakan lambdauntuk menetapkan fungsi ke variabel untuk reusage adalah gaya pengkodean yang buruk. Ada defuntuk itu.
Bachsau
0

Cara lain adalah dengan Ellipsis:

def foo():
    ...
Ray Z.
sumber
Itu tidak lebih baik dari sekadar memberi nama objek lain. Anda juga bisa menulis None, 136atau "NothingHere". Tapi fillgap yang benar dalam python adalah pass.
Bachsau