Jaki jest standardowy sposób wykonywania operacji no-op w Pythonie?


160

Często piszę konstrukcje if / elif / else w Pythonie i chcę dołączyć opcje, które mogą wystąpić, ale dla których odpowiednia akcja nie polega na nic. Zdaję sobie sprawę, że mógłbym po prostu wykluczyć te instrukcje if, ale ze względu na czytelność uważam, że pomocne jest uwzględnienie ich wszystkich, więc jeśli przeglądasz kod, możesz zobaczyć, co się dzieje w wyniku każdej opcji. Jak zakodować brak operacji? Obecnie robię to tak:

no_op = 0

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

(Kod jest w rzeczywistości nieco dłuższy i bardziej skomplikowany. To jest tylko dla zilustrowania struktury).

Nie lubię używać zmiennej jako no-op, ale to najładniejszy sposób, jaki mogłem wymyślić. Czy jest lepszy sposób?


1
Ten wielokropek ( ...) również zasługuje na wzmiankę: stackoverflow.com/a/6189281/38281
Patrick

Odpowiedzi:


288

Użyj przepustki, aby nie grać:

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

A oto kolejny przykład:

def f():
  pass

Lub:

class c:
  pass

3
Jako jednolinijkowy używam doSQL = lambda *x:x.
Cees Timmerman

2
Możesz użyć „None” zamiast „pass”, ale nie wyjaśnia to żadnego kodu.
DevPlayer,

Czy jest to obsługiwane w przypadku operacji trójskładnikowych, szczególnie w ramach else?
Alexej Magura

2
@AlexejMagura Nie, ponieważ passnie jest wartością. Nie rozumiem też, jak mogłoby się to przydać.
L3viathan


12

Jeśli potrzebujesz funkcji, która zachowuje się jak nop, spróbuj

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

Czasami robię takie rzeczy, gdy ustawiam zależności jako opcjonalne:

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

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

1
Jest to dobre obejście, gdy potrzebny nopjest kontekst, który wymaga konkretnie wyrażenia (w przeciwieństwie do arbitralnej instrukcji; qv docs.python.org/3/reference/simple_stmts.html i docs.python.org/3/reference/compound_stmts. html ) - jak np. jako podwyrażenie do istniejącego idiomu kodu, takiego jak rozumienie, lub a lambda, lub (nie daj Boże ) ciąg do przekazania eval(…)(który qv docs.python.org/3/library/functions.html# eval, jeśli musisz).
fish2000

Używanie lambdado przypisywania funkcji do zmiennej w celu ponownego użycia jest złym stylem kodowania. Jest defza to.
Bachsau

0

Innym sposobem jest wielokropek:

def foo():
    ...

To nie jest lepsze niż zwykłe nazwanie innego obiektu. Można również napisać None, 136lub "NothingHere". Ale prawidłowe wypełnienie w Pythonie to pass.
Bachsau
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.