python - ¿Es la ley pitónica de Morgan?
pep8 demorgans-law (6)
¿Cuál usar? Lo que sea más legible para lo que estás tratando de hacer.
En cuanto a lo que es más eficiente, el primero no hace un extra, por lo que es técnicamente menos eficiente, pero no lo notaría en una situación normal.
¿Cuál de las siguientes afirmaciones es más Pythonic?
if not a and not b:
do_something
O
if not ( a or b ):
do something
No es lógica de predicado, así que debería usar las palabras clave de Python porque es más legible, ¿no?
¿En la solución posterior más óptima que la otra? (No lo creo).
¿Hay alguna guía PEP-8 sobre esto?
Código de bytes de los dos enfoques (si importa):
In [43]: def func1():
if not a and not b:
return
....:
....:
In [46]: def func2():
if not(a or b):
return
....:
....:
In [49]: dis.dis(func1)
2 0 LOAD_GLOBAL 0 (a)
3 UNARY_NOT
4 JUMP_IF_FALSE 13 (to 20)
7 POP_TOP
8 LOAD_GLOBAL 1 (b)
11 UNARY_NOT
12 JUMP_IF_FALSE 5 (to 20)
15 POP_TOP
3 16 LOAD_CONST 0 (None)
19 RETURN_VALUE
>> 20 POP_TOP
21 LOAD_CONST 0 (None)
24 RETURN_VALUE
In [50]: dis.dis(func2)
2 0 LOAD_GLOBAL 0 (a)
3 JUMP_IF_TRUE 4 (to 10)
6 POP_TOP
7 LOAD_GLOBAL 1 (b)
>> 10 JUMP_IF_TRUE 5 (to 18)
13 POP_TOP
3 14 LOAD_CONST 0 (None)
17 RETURN_VALUE
>> 18 POP_TOP
19 LOAD_CONST 0 (None)
22 RETURN_VALUE
Creo que ambos ejemplos son igualmente legibles, sin embargo, si quisiera "empujar el bote" hacia la legibilidad, aceptaría:
not any((a, b))
Ya que para mí esto se lee mucho más como el inglés, y por lo tanto es el más pitónico.
Para que una pieza de código sea Pythonic, debe ser agradable para el lector en sí mismo (legible) y en el contexto de su entorno (coherente). Sin tener el contexto de este pedazo de código, una buena opinión es difícil de dar.
Pero, por otro lado ... Si estuviera siendo Pythonic en mi opinión, tendría que operar de forma coherente con mi entorno, lo que parece no tener en cuenta el contexto (por ejemplo, el OP).
El de arriba.
Personalmente me gusta el enfoque de Eiffel, puesto en forma pirónica.
si ay luego b: dosometría
si ayb: dosometría
El primer enfoque difiere del segundo si a es falso. No evalúa b en el primer caso, en el segundo caso.
El o equivalente es "o bien"
http://en.wikipedia.org/wiki/Short-circuit_evaluation
y / o están ansiosos.
y luego / o de lo contrario cortocircuito la evaluación
Lo bueno de la sintaxis es que se lee bien y no introduce nuevas palabras clave.
Son equivalentes y si uno es más rápido que el otro depende de las circunstancias (los valores de a y b).
Solo elija la versión que le resulte más legible y / o comprensible.
Yo diría lo que sea más fácil para usted leer, dependiendo de lo que son a y b.