Quelle est la manière standard de faire un no-op en python?

160

Je me retrouve souvent à écrire if / elif / else construit en python, et je veux inclure des options qui peuvent se produire, mais pour lesquelles l'action correspondante est de ne rien faire. Je me rends compte que je pourrais simplement exclure ces instructions if, mais pour plus de lisibilité, je trouve qu'il est utile de les inclure toutes, de sorte que si vous regardez à travers le code, vous pouvez voir ce qui se passe à la suite de chaque option. Comment coder le no-op? Actuellement, je le fais comme ceci:

no_op = 0

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

(Le code est en fait un peu plus long que cela, et plus compliqué. C'est juste pour illustrer la structure).

Je n'aime pas utiliser une variable comme un no-op, mais c'est la manière la plus soignée que je puisse imaginer. Y a-t-il un meilleur moyen?

Ben
la source
1
Cette Ellipse ( ...) mérite également une mention: stackoverflow.com/a/6189281/38281
Patrick

Réponses:

288

Utilisez pass pour no-op:

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

Et voici un autre exemple:

def f():
  pass

Ou:

class c:
  pass
Brian R. Bondy
la source
3
En tant que monoplace, j'utilise doSQL = lambda *x:x.
Cees Timmerman
2
Vous pouvez utiliser "Aucun" à la place de "passer" mais cela ne clarifie aucun code.
DevPlayer
Est-ce pris en charge pour les opérations ternaires, en particulier sous else?
Alexej Magura
2
@AlexejMagura Non, car ce passn'est pas une valeur. Je ne vois pas non plus en quoi cela pourrait être utile.
L3viathan
25

Et pourquoi pas pass?

Johan Kotlinski
la source
12

Si vous avez besoin d'une fonction qui se comporte comme un nop, essayez

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

Parfois, je fais des choses comme ça quand je fais des dépendances facultatives:

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
la source
1
C'est une bonne solution de contournement lorsque l'on a besoin du nopdans un contexte qui nécessite spécifiquement une expression (par opposition à une instruction arbitraire; qv docs.python.org/3/reference/simple_stmts.html et docs.python.org/3/reference/compound_stmts. html ) - comme par exemple en tant que sous-expression à un idiome de code existant comme une compréhension, ou a lambda, ou (Dieu nous en préserve) une chaîne à passer eval(…)( dans laquelle qv docs.python.org/3/library/functions.html# eval si vous devez).
fish2000
Utiliser lambdapour affecter une fonction à une variable pour la réutilisation est un mauvais style de codage. Il y a defpour ça.
Bachsau
0

Une autre façon est avec Ellipsis:

def foo():
    ...
Ray Z.
la source
Ce n'est pas mieux que de simplement nommer un autre objet. Vous pouvez aussi écrire None, 136ou "NothingHere". Mais le fillgap correct en python est pass.
Bachsau