sintaxis significado reservadas reservada palabras palabra claves and python syntax

python - claves - palabras reservadas y su significado



Orden de sintaxis para usar palabras clave ''no'' y ''in'' (6)

Al probar la membresía, podemos usar:

x not in y

O alternativamente:

not y in x

Puede haber muchos contextos posibles para esta expresión según y . Podría ser para un control de subcadena, membresía de lista, existencia de clave dict, por ejemplo.

  • ¿Son las dos formas siempre equivalentes?
  • ¿Hay una sintaxis preferida?

En Python, no hay diferencia. Y no hay preferencia


Otros ya han dejado muy claro que las dos declaraciones son, hasta un nivel bastante bajo, equivalentes.

Sin embargo, no creo que nadie haya enfatizado lo suficiente, ya que esto le deja la elección a usted, usted debería

elija la forma que hace que su código sea lo más legible posible.

Y no necesariamente tan legible como sea posible para nadie , incluso si eso es, por supuesto, algo bueno para apuntar. No, asegúrese de que el código sea lo más legible posible para usted , ya que usted es el que tiene más probabilidades de volver a este código más adelante e intentar leerlo.


Siempre dan el mismo resultado.

De hecho, not ''ham'' in ''spam and eggs'' parece tener un diseño especial para realizar una única operación "no en", en lugar de una operación "en" y luego anular el resultado:

>>> import dis >>> def notin(): ''ham'' not in ''spam and eggs'' >>> dis.dis(notin) 2 0 LOAD_CONST 1 (''ham'') 3 LOAD_CONST 2 (''spam and eggs'') 6 COMPARE_OP 7 (not in) 9 POP_TOP 10 LOAD_CONST 0 (None) 13 RETURN_VALUE >>> def not_in(): not ''ham'' in ''spam and eggs'' >>> dis.dis(not_in) 2 0 LOAD_CONST 1 (''ham'') 3 LOAD_CONST 2 (''spam and eggs'') 6 COMPARE_OP 7 (not in) 9 POP_TOP 10 LOAD_CONST 0 (None) 13 RETURN_VALUE >>> def not__in(): not (''ham'' in ''spam and eggs'') >>> dis.dis(not__in) 2 0 LOAD_CONST 1 (''ham'') 3 LOAD_CONST 2 (''spam and eggs'') 6 COMPARE_OP 7 (not in) 9 POP_TOP 10 LOAD_CONST 0 (None) 13 RETURN_VALUE >>> def noteq(): not ''ham'' == ''spam and eggs'' >>> dis.dis(noteq) 2 0 LOAD_CONST 1 (''ham'') 3 LOAD_CONST 2 (''spam and eggs'') 6 COMPARE_OP 2 (==) 9 UNARY_NOT 10 POP_TOP 11 LOAD_CONST 0 (None) 14 RETURN_VALUE

Al principio pensé que siempre daban el mismo resultado, pero que not era solo un operador de negación lógica de baja precedencia, que podía aplicarse a a in b tan fácilmente como a cualquier otra expresión booleana, mientras que not in era un operador separado por conveniencia y claridad.

¡El desmontaje de arriba fue revelador! Parece que si bien not es obviamente un operador de negación lógica, la forma not a in b tiene una cubierta especial, por lo que no está realmente utilizando el operador general. Esto hace que not a in b literalmente, la misma expresión que a not in b , en lugar de simplemente una expresión que da como resultado el mismo valor.


Sintácticamente son la misma declaración. Me apresuraría a decir que ''ham'' not in ''spam and eggs'' transmite una intención más clara, pero he visto códigos y escenarios en los que not ''ham'' in ''spam and eggs'' transmite un significado más claro que el otro.



  1. No, no hay diferencia.

    El operador not in está definido para tener el verdadero valor inverso de in .

    - Documentación de Python

  2. Supongo que not in es preferible porque es más obvio y agregaron un caso especial para ello.