¿Cuál es una forma estándar de hacer un no-op en python?

160

A menudo me encuentro escribiendo if / elif / else construcciones en python, y quiero incluir opciones que pueden ocurrir, pero para las cuales la acción correspondiente es no hacer nada. Me doy cuenta de que podría excluir esas declaraciones if, pero para facilitar la lectura, creo que es útil incluirlas todas, de modo que si está mirando el código puede ver lo que sucede como resultado de cada opción. ¿Cómo codifico el no-op? Actualmente, lo estoy haciendo así:

no_op = 0

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

(El código es bastante más largo que eso y más complicado. Esto es solo para ilustrar la estructura).

No me gusta usar una variable como un no-op, pero es la mejor forma en que puedo pensar. ¿Hay una mejor manera?

Ben
fuente
1
Esta elipsis ( ...) también merece una mención: stackoverflow.com/a/6189281/38281
Patrick

Respuestas:

288

Use el pase para no-op:

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

Y aquí hay otro ejemplo:

def f():
  pass

O:

class c:
  pass
Brian R. Bondy
fuente
3
Como una línea, yo uso doSQL = lambda *x:x.
Cees Timmerman
2
Puede usar "Ninguno" en lugar de "pasar" pero no aclara el código.
DevPlayer
¿Se admite esto para operaciones ternarias, particularmente bajo else?
Alexej Magura
2
@AlexejMagura No, porque passno es un valor. Tampoco puedo ver cómo podría ser útil.
L3viathan
25

¿Qué tal pass?

Johan Kotlinski
fuente
12

Si necesita una función que se comporte como un nop, intente

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

A veces hago cosas como esta cuando hago las dependencias opcionales:

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
fuente
1
Esta es una buena solución cuando se necesita nopen un contexto que requiere específicamente una expresión (versus una declaración arbitraria; qv docs.python.org/3/reference/simple_stmts.html y docs.python.org/3/reference/compound_stmts. html ) - como, por ejemplo, como una sub-expresión a un idioma de código existente como una comprensión, o un lambda, o (Dios no lo quiera) una cadena para pasar eval(…)(que qv docs.python.org/3/library/functions.html# evalúa si debes).
fish2000
Usar lambdapara asignar una función a una variable para su reutilización es un mal estilo de codificación. Hay defpara eso.
Bachsau
0

Otra forma es con puntos suspensivos:

def foo():
    ...
Ray Z.
fuente
Eso no es mejor que simplemente nombrar cualquier otro objeto. También podría escribir None, 136o "NothingHere". Pero el relleno correcto en python es pass.
Bachsau