O que é uma maneira padrão de fazer um não operacional em python?


160

Costumo encontrar-me escrevendo se / elif / else constrói em python e quero incluir opções que podem ocorrer, mas para as quais a ação correspondente é não fazer nada. Sei que poderia simplesmente excluir essas instruções if, mas, para facilitar a leitura, acho que é útil incluir todas elas, de modo que, se você estiver olhando o código, poderá ver o que acontece como resultado de cada opção. Como codifico o no-op? Atualmente, estou fazendo assim:

no_op = 0

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

(Na verdade, o código é um pouco mais longo que isso e mais complicado. Isso é apenas para ilustrar a estrutura).

Não gosto de usar uma variável como não-op, mas é a maneira mais legal de pensar. Existe uma maneira melhor?


1
Este Reticências ( ...) também merece uma menção: stackoverflow.com/a/6189281/38281
Patrick

Respostas:


288

Use passe para no-op:

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

E aqui está outro exemplo:

def f():
  pass

Ou:

class c:
  pass

3
Como one-liner, eu uso doSQL = lambda *x:x.
perfil completo de Cees Timmerman

2
Você pode usar "None" no lugar de "pass", mas não esclarece nenhum código.
DevPlayer

Isso é suportado para operações ternárias, principalmente em else?
Alexej Magura

2
@AlexejMagura Não, porque passnão é um valor. Também não consigo ver como isso poderia ser útil.
precisa saber é o seguinte


12

Se você precisar de uma função que se comporte como um nop, tente

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

Às vezes, faço coisas assim quando estou tornando as dependências opcionais:

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

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

1
Essa é uma boa solução alternativa quando se precisa de nopum contexto que exija especificamente uma expressão (versus uma declaração arbitrária; qv docs.python.org/3/reference/simple_stmts.html e docs.python.org/3/reference/compound_stmts. html ) - como, por exemplo, como uma sub-expressão de um idioma de código existente, como uma compreensão, ou a lambda, ou (deus não permita) uma string a ser passada eval(…)( na qual qv docs.python.org/3/library/functions.html# avaliação, se necessário).
precisa saber é o seguinte

Usar lambdapara atribuir uma função a uma variável para reutilização é um estilo de codificação ruim. Há defpara isso.
Bachsau 17/07

0

Outra maneira é com reticências:

def foo():
    ...

Isso não é melhor do que apenas nomear qualquer outro objeto. Você também pode escrever None, 136ou "NothingHere". Mas o preenchimento correto em python é pass.
Bachsau 17/07
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.