Python'da no-op yapmanın standart yolu nedir?


160

Sık sık kendimi / elif / else python içinde oluşturuyorsa yazıyorum ve oluşabilecek, ancak karşılık gelen eylemin hiçbir şey yapmaması gereken seçenekleri dahil etmek istiyorum. Ben sadece bu if ifadeleri hariç tutabileceğinin farkındayım, ancak okunabilirlik için hepsini dahil etmeye yardımcı olur, böylece koda bakıyorsanız, her seçeneğin bir sonucu olarak neler olduğunu görebilirsiniz. İşlem yapmayı nasıl kodlarım? Şu anda böyle yapıyorum:

no_op = 0

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

(Kod aslında bundan biraz daha uzun ve daha karmaşıktır. Bu sadece yapıyı göstermek içindir).

Değişkeni no-op olarak kullanmaktan hoşlanmıyorum, ama düşünebildiğim en güzel yol bu. Daha iyi bir yol var mı?


1
Bu Elips ( ...) ayrıca bir sözü de hak ediyor: stackoverflow.com/a/6189281/38281
Patrick

Yanıtlar:


288

Operasyon için pass kullan :

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

Ve işte başka bir örnek:

def f():
  pass

Veya:

class c:
  pass

3
Tek astar olarak kullanıyorum doSQL = lambda *x:x.
Cees Timmerman

2
"Geçiş" yerine "Hiçbiri" kullanabilirsiniz, ancak herhangi bir kodu açıklığa kavuşturmaz.
DevPlayer

Bu üçlü operasyonlar için destekleniyor elsemu , özellikle altında mı?
Alexej Magura

2
@AlexejMagura Hayır, çünkü passbir değer değil. Bunun nasıl yararlı olabileceğini de göremiyorum.
L3viathan


12

Bir nop gibi davranan bir fonksiyona ihtiyacınız varsa,

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

Bazen bağımlılıkları isteğe bağlı yaptığımda böyle şeyler yaparım:

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

# Doesn't break when foo is missing:
bar()
baz()

1
Bu, nopözellikle bir ifade gerektiren bir bağlamda (keyfi bir ifadeye karşı; qv docs.python.org/3/reference/simple_stmts.html ve docs.python.org/3/reference/compound_stmts) ihtiyaç duyulduğunda iyi bir çözümdür. html ) - örneğin, bir anlama gibi mevcut bir kod deyimine alt ifade olarak veya a lambdaveya (tanrı yasaklı ) bir dizeye eval(…)(hangi qv docs.python.org/3/library/functions.html# aktarılacağı gibi) Gerekirse eval ).
fish2000

Yeniden kullanım lambdaiçin bir değişkene fonksiyon atamak kötü kodlama tarzıdır. Bunun defiçin var.
Bachsau

0

Başka bir yol Elips ile:

def foo():
    ...

Bu sadece başka bir nesneyi adlandırmaktan daha iyi değil. Ayrıca yazabilirsiniz None, 136veya "NothingHere". Ancak python'daki doğru doldurma boşluğu pass.
Bachsau
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.