Estoy en el proceso de aprender Python y he llegado a la sección sobre la pass
declaración. La guía que estoy usando lo define como una Null
declaración que se usa comúnmente como marcador de posición.
Sin embargo, todavía no entiendo completamente lo que eso significa. ¿Alguien puede mostrarme una situación simple / básica donde se pass
usaría la declaración y por qué es necesaria?
pass
que sería útil cuando desea anular un método en una subclase para no hacer nada.pass
elexcept
bloque es muy útil.Respuestas:
Supongamos que está diseñando una nueva clase con algunos métodos que aún no desea implementar.
Si dejaras de lado
pass
, el código no se ejecutaría.Entonces obtendrías un:
Para resumir, la
pass
declaración no hace nada en particular, pero puede actuar como un marcador de posición, como se demuestra aquí.fuente
return
, aunque con una ligera pérdida de claridad.pass
, pero todavía no entiendo realmente lo que hace. ¿Hay un uso para esto en el código de producción? A partir de su ejemplo, optaría por no agregar ese método hasta que esté listo para implementarlo, o simplemente lo haríareturn
.Python tiene el requisito de que los bloques de código sintáctico (después de
if
,except
,def
,class
etc.) no pueden estar vacíos. Sin embargo, los bloques de código vacíos son útiles en una variedad de contextos diferentes, como en los ejemplos a continuación, que son los casos de uso más frecuentes que he visto.Por lo tanto, si no se supone que suceda nada en un bloque de código,
pass
se necesita a para que dicho bloque no produzca unIndentationError
. Alternativamente, se puede usar cualquier declaración (incluyendo solo un término para ser evaluado, como elEllipsis
literal...
o una cadena, la mayoría de las veces una cadena de documentos), peropass
deja en claro que, de hecho, no se supone que suceda nada, y no necesita ser realmente evaluado y (al menos temporalmente) almacenado en la memoria.Ignorando (todos o) un cierto tipo de
Exception
(ejemplo dexml
):Nota: Ignorar todos los tipos de aumentos, como en el siguiente ejemplo
pandas
, generalmente se considera una mala práctica, ya que también detecta excepciones que probablemente deberían transmitirse a la persona que llama, por ejemplo,KeyboardInterrupt
oSystemExit
(o inclusoHardwareIsOnFireError
- ¿Cómo sabes que no eres? ejecutándose en un cuadro personalizado con errores específicos definidos, que algunas aplicaciones de llamadas querrían saber?En cambio, usar al menos
except Error:
o en este caso preferiblementeexcept OSError:
se considera una práctica mucho mejor. Un análisis rápido de todos los módulos de Python que he instalado me dio que más del 10% de todas lasexcept ...: pass
declaraciones capturan todas las excepciones, por lo que sigue siendo un patrón frecuente en la programación de Python.Derivar una clase de excepción que no agrega un nuevo comportamiento (por ejemplo, en
scipy
):Del mismo modo, las clases destinadas a la clase base abstracta a menudo tienen un vacío explícito
__init__
u otros métodos que se supone que derivan las subclases. (por ejemplopebl
)La prueba de ese código se ejecuta correctamente para algunos valores de prueba, sin preocuparse por los resultados (de
mpmath
):En las definiciones de clase o función, a menudo una cadena de documentación ya está en su lugar como la declaración obligatoria que debe ejecutarse como la única cosa en el bloque. En tales casos, el bloque puede contener
pass
además de la cadena de documentación para decir "Esto no pretende hacer nada", por ejemplo enpebl
:En algunos casos,
pass
se usa como marcador de posición para decir "Este método / clase / if-block / ... aún no se ha implementado, pero este será el lugar para hacerlo", aunque personalmente prefiero elEllipsis
literal...
para diferenciar estrictamente entre esto y la intencional "no-op" en el ejemplo anterior. ( Tenga en cuenta que el literal de puntos suspensivos es una expresión válida solo en Python 3 )Por ejemplo, si escribo un modelo a grandes rasgos, podría escribir
donde otros podrían tener
antes de
como un recordatorio para completar la
update_agent
función en un momento posterior, pero ejecute algunas pruebas para ver si el resto del código se comporta como se esperaba. (Una tercera opción para este caso esraise NotImplementedError
. Esto es útil en particular para dos casos: "Este método abstracto debe ser implementado por cada subclase, no hay una forma genérica de definirlo en esta clase base" , o "Esta función, con este nombre, aún no está implementado en esta versión, pero así es como se verá su firma " )fuente
Además de su uso como marcador de posición para funciones no implementadas,
pass
puede ser útil para completar una instrucción if-else ("explícito es mejor que implícito").Por supuesto, en este caso, uno probablemente usaría en
return
lugar de la asignación, pero en los casos en que se desea la mutación, esto funciona mejor.El uso de
pass
aquí es especialmente útil para advertir a los futuros mantenedores (¡incluido usted mismo!) De no poner pasos redundantes fuera de las declaraciones condicionales. En el ejemplo anterior,flag
se establece en los dos casos mencionados específicamente, pero no en elelse
caso. Sin usarpass
, un futuro programador podría moverseflag = True
fuera de la condición, configurando asíflag
en todos los casos.Otro caso es con la función repetitiva que a menudo se ve al final de un archivo:
En algunos archivos, puede ser bueno dejar eso allí
pass
para permitir una edición más fácil más adelante y hacer explícito que no se espera que suceda nada cuando el archivo se ejecuta por sí solo.Finalmente, como se menciona en otras respuestas, puede ser útil no hacer nada cuando se detecta una excepción:
fuente
flag = False
antes delif ... elif
bloque para evitar errores oscuros de "NameError: name 'flag' no está definido" más adelante. Con respecto al segundo ejemplo, parece extraño tener que agregarif __name__ == "__main__": pass
a la mayoría de los archivos Python que no hacen nada cuando se ejecutan directamente (que es el caso cuando está escribiendo código modular). Con Python> = 3.0, debe usar...
(puntos suspensivos) en lugar depass
indicar bloques "finalizar más tarde".La mejor y más precisa forma de pensar
pass
es decirle explícitamente al intérprete que no haga nada. Del mismo modo el siguiente código:significa "si llamo a la función foo (x, y), sume los dos números que representan las etiquetas x e y y devuelva el resultado",
significa "Si llamo a la barra de funciones (), no haga absolutamente nada".
Las otras respuestas son bastante correctas, pero también son útiles para algunas cosas que no implican mantener el lugar.
Por ejemplo, en un poco de código en el que trabajé recientemente, era necesario dividir dos variables y era posible que el divisor fuera cero.
Obviamente, producirá un ZeroDivisionError si b es cero. En esta situación particular, dejar c como cero era el comportamiento deseado en el caso de que b fuera cero, así que utilicé el siguiente código:
Otro uso menos estándar es un lugar útil para poner un punto de interrupción para su depurador. Por ejemplo, quería un poco de código para entrar en el depurador en la vigésima iteración de una declaración for ... in. Entonces:
con el punto de quiebre en el pase.
fuente
def bar(): pass
no hace "absolutamente nada". Todavía regresaNone
, implícitamente.Un caso de uso común donde se puede usar 'tal cual' es anular una clase solo para crear un tipo (que de otro modo es el mismo que la superclase), por ejemplo
Para que pueda plantear y atrapar
Error
excepciones. Lo que importa aquí es el tipo de excepción, en lugar del contenido.fuente
pass
en Python básicamente no hace nada, pero a diferencia de un comentario, el intérprete no lo ignora. Por lo tanto, puede aprovecharlo en muchos lugares al convertirlo en un marcador de posición:1: se puede usar en clase
2: Se puede usar en bucles y declaraciones condicionales:
3: se puede utilizar en la función:
pass
se usa principalmente cuando el programador no quiere dar implementación en este momento, pero aún quiere crear una determinada clase / función / declaración condicional que se pueda usar más adelante. Dado que el intérprete de Python no permite la declaración de clase / función / condicional en blanco o sin implementar, da un error:pass
se puede usar en tales escenarios.fuente
Puede decir que pasar significa operación NOP (sin operación). Obtendrá una imagen clara después de este ejemplo: -
Programa C
Ahora, cómo escribirás eso en Python: -
Pero su código dará error porque requiere un bloque sangrado después de elif . Aquí está el papel de la palabra clave pass .
Ahora creo que está claro para ti.
fuente
&&
operador no existe en PythonMe gusta usarlo cuando apago las pruebas. Muchas veces soy consciente de lo que me gustaría probar, pero no sé cómo hacerlo. El ejemplo de prueba se parece a lo que sugirió sebastian_oe
fuente
assert False
o deassert 0
esta manera siempre se te indicará que debes agregar una implementación :)La declaración de aprobación no hace nada. Se puede usar cuando se requiere una declaración sintácticamente pero el programa no requiere ninguna acción.
fuente
Honestamente, creo que los documentos oficiales de Python lo describen bastante bien y proporcionan algunos ejemplos:
fuente
como decía el libro, solo lo uso como marcador de posición temporal, es decir,
y luego complete el escenario donde
var == 2000
fuente
Pass se refiere a ignorar ... tan simple como es ... si la condición dada es verdadera y la siguiente instrucción es pass, ignora ese valor o iteración y pasa a la siguiente línea ..... Ejemplo
Salida: Imprime todos los números impares del 1-100
Esto se debe a que el módulo de número par es igual a cero, por lo tanto, ignora el número y pasa al siguiente número, ya que el módulo de números impares no es igual a cero, la parte Else del bucle se ejecuta y se imprime
fuente
SyntaxError
. Además, este no es un buen usopass
porque simplemente podría hacerlofor i in range(1,100):print(i)if i%2else""
Aquí hay un ejemplo en el que extraía datos particulares de una lista en la que tenía varios tipos de datos (así es como lo llamaría en R, perdón si es una nomenclatura incorrecta) y quería extraer solo datos enteros / numéricos y NO caracteres. .
Los datos se veían así:
Quería eliminar todos los caracteres alfabéticos, así que hice que la máquina lo hiciera subconjustando los datos y "pasando" los datos alfabéticos:
fuente
La sentencia pass en Python se usa cuando se requiere una sentencia sintácticamente pero no desea que se ejecute ningún comando o código.
La sentencia pass es una operación nula; No pasa nada cuando se ejecuta. El pase también es útil en lugares donde su código eventualmente irá, pero aún no se ha escrito (por ejemplo, en trozos, por ejemplo):
`Ejemplo:
Esto producirá el siguiente resultado:
El código anterior no ejecuta ninguna instrucción o código si el valor de la letra es 'h'. La declaración de aprobación es útil cuando ha creado un bloque de código pero ya no es necesario.
Luego puede eliminar las declaraciones dentro del bloque pero dejar que el bloque permanezca con una declaración de paso para que no interfiera con otras partes del código.
fuente
pass se usa para evitar errores de sangría en python Si tomamos lenguajes como c, c ++, java, tienen llaves como
Pero en python usaba sangría en lugar de llaves, así que para evitar tales errores usamos pass. Recordaba mientras jugabas un cuestionario y
Programa de ejemplo,
fuente