Estou aprendendo Python e cheguei à seção sobre a pass
declaração. O guia que estou usando define como sendo uma Null
declaração comumente usada como espaço reservado.
Ainda não entendo completamente o que isso significa. Alguém pode me mostrar uma situação simples / básica em que a pass
declaração seria usada e por que é necessária?
pass
seria útil quando você deseja substituir um método em uma subclasse para não fazer nada.pass
, oexcept
bloco é muito útil.Respostas:
Suponha que você esteja projetando uma nova classe com alguns métodos que ainda não deseja implementar.
Se você deixar de fora
pass
o código não será executado.Você então obteria:
Para resumir, a
pass
declaração não faz nada em particular, mas pode atuar como um espaço reservado, conforme demonstrado aqui.fonte
return
, embora com uma leve perda de clareza.pass
, mas eu ainda não entendo o que ele faz. Existe um uso para isso no código de produção? No seu exemplo, eu optaria por não adicionar esse método até estar pronto para implementá-lo, ou simplesmente o fariareturn
.Python tem o requisito sintática que blocos de código (após
if
,except
,def
,class
etc.) não podem estar vazio. No entanto, blocos de código vazios são úteis em vários contextos diferentes, como nos exemplos abaixo, que são os casos de uso mais frequentes que já vi.Portanto, se nada deve acontecer em um bloco de código,
pass
é necessário a para que esse bloco não produza umIndentationError
. Como alternativa, qualquer declaração (incluindo apenas um termo a ser avaliado, comoEllipsis
literal...
ou uma string, na maioria das vezes uma docstring) pode ser usada, maspass
deixa claro que realmente nada deve acontecer e não precisa ser realmente avaliado e (pelo menos temporariamente) armazenado na memória.Ignorando (todos ou) um determinado tipo de
Exception
(exemplo dexml
):Nota: Ignorar todos os tipos de raises, como no exemplo a seguir
pandas
, geralmente é considerado uma prática ruim, porque também captura exceções que provavelmente devem ser repassadas ao chamador, por exemplo,KeyboardInterrupt
ouSystemExit
(ou mesmoHardwareIsOnFireError
- Como você sabe que não é executando em uma caixa personalizada com erros específicos definidos, sobre os quais alguns aplicativos de chamada gostariam de saber?).Em vez disso, usar pelo menos
except Error:
ou nesse caso de preferênciaexcept OSError:
é considerado uma prática muito melhor. Uma análise rápida de todos os módulos python que instalei me deu que mais de 10% de todas asexcept ...: pass
instruções capturam todas as exceções, por isso ainda é um padrão frequente na programação python.Derivando uma classe de exceção que não adiciona novo comportamento (por exemplo, in
scipy
):Da mesma forma, as classes designadas como classe base abstrata geralmente têm
__init__
métodos vazios explícitos ou outros que as subclasses devem derivar. (por exemplopebl
)Testar esse código é executado corretamente para alguns valores de teste, sem se preocupar com os resultados (de
mpmath
):Nas definições de classe ou função, muitas vezes já existe uma doutrina como a declaração obrigatória a ser executada como a única coisa no bloco. Nesses casos, o bloco pode conter
pass
, além da doutrina, para dizer "Isso realmente não deve fazer nada". Por exemplo, empebl
:Em alguns casos,
pass
é usado como espaço reservado para dizer "Este método / classe / se-bloco / ... ainda não foi implementado, mas este será o local para fazê-lo", embora eu pessoalmente prefira oEllipsis
literal...
para estritamente diferencie isso e o intencional "não-op" no exemplo anterior. ( Observe que o literal de reticências é uma expressão válida apenas no Python 3 ).Por exemplo, se eu escrever um modelo em traços largos, talvez eu escreva
onde outros possam ter
antes
como um lembrete para preencher a
update_agent
função posteriormente, mas execute alguns testes já para verificar se o restante do código se comporta como pretendido. (Uma terceira opção para este caso éraise NotImplementedError
. Isso é útil em particular em dois casos: “Esse método abstrato deve ser implementado por todas as subclasses, não há uma maneira genérica de defini-lo nessa classe base” ou “Esta função, com esse nome ainda não foi implementado nesta versão, mas é assim que será sua assinatura ” )fonte
Além de seu uso como espaço reservado para funções não implementadas,
pass
pode ser útil no preenchimento de uma declaração if-else ("Explícito é melhor que implícito").Obviamente, nesse caso, provavelmente seria usado em
return
vez de atribuição, mas nos casos em que a mutação é desejada, isso funciona melhor.O uso
pass
aqui é especialmente útil para avisar futuros mantenedores (inclusive você!) Para não colocar etapas redundantes fora das instruções condicionais. No exemplo acima,flag
é definido nos dois casos mencionados especificamente, mas não naelse
caixa. Sem usarpass
, um programador futuro pode passarflag = True
para fora da condição - configurando assimflag
em todos os casos.Outro caso é com a função clichê, geralmente vista na parte inferior de um arquivo:
Em alguns arquivos, pode ser bom deixar isso
pass
para permitir uma edição mais fácil mais tarde e deixar explícito que nada deve acontecer quando o arquivo for executado por si próprio.Por fim, como mencionado em outras respostas, pode ser útil não fazer nada quando uma exceção é capturada:
fonte
flag = False
antes doif ... elif
bloco para evitar erros obscuros "NameError: name 'flag' não está definido" posteriormente. Em relação ao segundo exemplo, parece bizzar ter que adicionarif __name__ == "__main__": pass
à maioria dos arquivos Python que não fazem nada quando executados diretamente (o que acontece quando você está escrevendo código modular). Com Python> = 3.0, você deve usar...
(reticências) em vez depass
indicar blocos "terminar mais tarde".A melhor e mais precisa maneira de pensar
pass
é como dizer explicitamente ao intérprete que não faça nada. Da mesma maneira, o seguinte código:significa "se eu chamar a função foo (x, y), some os dois números que os rótulos x e y representam e devolva o resultado",
significa "Se eu chamar a função bar (), não faça absolutamente nada."
As outras respostas são bastante corretas, mas também são úteis para algumas coisas que não envolvem a troca de lugar.
Por exemplo, em um pouco de código em que trabalhei recentemente, era necessário dividir duas variáveis e era possível que o divisor fosse zero.
obviamente produzirá um ZeroDivisionError se b for zero. Nessa situação em particular, deixar c como zero era o comportamento desejado no caso de b ser zero, então usei o seguinte código:
Outro uso menos padrão é um local útil para colocar um ponto de interrupção no seu depurador. Por exemplo, eu queria que um pouco de código invadisse o depurador na 20ª iteração de uma declaração for for .... Assim:
com o ponto de interrupção de passagem.
fonte
def bar(): pass
não faz "absolutamente nada". Ainda retornaNone
, implicitamente.Um caso de uso comum em que pode ser usado 'como está' é substituir uma classe apenas para criar um tipo (que, de outra forma, é o mesmo que a superclasse), por exemplo
Então você pode criar e capturar
Error
exceções. O que importa aqui é o tipo de exceção, e não o conteúdo.fonte
pass
no Python basicamente não faz nada, mas, diferentemente de um comentário, ele não é ignorado pelo intérprete. Assim, você pode tirar proveito disso em muitos lugares, tornando-o um marcador de posição:1: Pode ser usado em aula
2: Pode ser usado em loop e em instruções condicionais:
3: Pode ser usado em função:
pass
é usado principalmente quando o programador não deseja dar implementação no momento, mas ainda deseja criar uma determinada instrução de classe / função / condicional que pode ser usada posteriormente. Como o intérprete Python não permite uma instrução em branco / não implementada de classe / função / condicional, ocorre um erro:pass
pode ser usado em tais cenários.fonte
Você pode dizer que passe significa operação NOP (sem operação). Você obterá uma imagem clara após este exemplo: -
Programa C
Agora, como você escreverá isso em Python: -
Mas seu código dará erro porque exigiu um bloco recuado após elif . Aqui está o papel da palavra-chave pass .
Agora eu acho que está claro para você.
fonte
&&
operador não existe no PythonEu gosto de usá-lo ao remover testes. Muitas vezes, tenho consciência do que gostaria de testar, mas não sei exatamente como fazê-lo. O exemplo de teste se parece com o que sebastian_oe sugeriu
fonte
assert False
ouassert 0
dessa forma, você sempreA declaração de aprovação não faz nada. Pode ser usado quando uma declaração é necessária sintaticamente, mas o programa não requer nenhuma ação.
fonte
Honestamente, acho que os documentos oficiais do Python o descrevem muito bem e fornecem alguns exemplos:
fonte
como o livro dizia, eu só o uso como espaço reservado temporário, ou seja,
e depois preencha o cenário em que
var == 2000
fonte
Passagem refere-se a ignorar .... por mais simples que seja .... se a condição fornecida for verdadeira e a próxima instrução for aprovada, ela ignora esse valor ou iteração e prossegue para a próxima linha ..... Exemplo
Saída: Imprime todos os números ímpares de 1 a 100
Isso ocorre porque o módulo do número par é igual a zero; portanto, ele ignora o número e prossegue para o próximo número, pois o módulo de números ímpares não é igual a zero, a parte Else do loop é executada e é impressa.
fonte
SyntaxError
. Além disso, este não é um bom uso dopass
porque você poderia simplesmente fazerfor i in range(1,100):print(i)if i%2else""
Aqui está um exemplo em que eu estava extraindo dados específicos de uma lista onde eu tinha vários tipos de dados (é o que eu chamaria em R - desculpe se é a nomenclatura errada) e eu queria extrair apenas dados inteiros / numéricos e NÃO de caracteres .
Os dados pareciam:
Eu queria remover todos os caracteres alfabéticos, então fiz com que a máquina o fizesse subconjuntando os dados e "passando" os dados alfabéticos:
fonte
A instrução pass no Python é usada quando uma instrução é necessária sintaticamente, mas você não deseja que nenhum comando ou código seja executado.
A declaração de aprovação é uma operação nula; nada acontece quando é executado. O passe também é útil em locais onde seu código acabará indo, mas ainda não foi gravado (por exemplo, em stubs, por exemplo):
`Exemplo:
Isso produzirá o seguinte resultado:
O código anterior não executa nenhuma instrução ou código se o valor da letra for 'h'. A declaração de aprovação é útil quando você cria um bloco de código, mas não é mais necessário.
Você pode remover as instruções dentro do bloco, mas deixar o bloco permanecer com uma declaração de aprovação para que não interfira com outras partes do código.
fonte
pass é usado para evitar erros de indentação em python Se usarmos linguagens como c, c ++, java, elas têm chaves como
Mas em python, ele usava indentação em vez de chaves, para evitar esses erros que usamos pass. Lembrado como você estava jogando um questionário e
Programa de exemplo,
fonte