Si no vs sino

Python si no es verdad

If I Was o If I Were: Guía fácil sobre el uso adecuado ¿Por qué se dice if I were cuando nunca se diría I were? ¿Y por qué es más correcto que if I was en algunos casos? Sigue leyendo para saber cuándo es apropiado decir if I were – y cómo saber si lo estás usando correctamente en los modos condicional o subjuntivo.

Más recursos gramaticalesSi hay otros conceptos gramaticales que te confunden, estás en el lugar adecuado. Un útil artículo ofrece ejemplos para aclarar la diferencia entre their, there y they’re. También puedes aprender a utilizar correctamente use to vs used to en una frase.

Si python

Además, tenga cuidado con las listas. No debe usar is cuando compare para una lista vacía. Si sabes que estás recibiendo una lista, usa if <lista> para comprobar si tiene algún contenido (o len()). Intente escribir esto en el intérprete:

Esto se debe a que la lista temporal que acabas de hacer tiene una dirección diferente en memoria que la almacenada en <a>. Usted no ve esto con None, False, o True porque estos son todos los valores que son singletons (todos ellos se refieren a la misma sección de la memoria) por lo que el uso de la palabra clave ‘is’ funciona.

Su uso del operador is es un poco problemático. Si el valor es [] siempre será falso, por ejemplo, porque no hay dos listas activas que tengan la misma identidad. Funciona muy bien con None porque None es un singleton (todas las referencias a None son el mismo objeto) pero para otras comparaciones, usa ==.

Leer más  Rescate fondo de pensiones

Sin embargo, if value y if not value son perfectamente legibles y útiles. En mi opinión, no hay necesidad de ser más específico, a menos que necesites tratar varios tipos de valores verdaderos o falsos de forma diferente, como, por ejemplo, distinguir entre 0 y None.

Python si no es igual

¿Dices que te llamaré a más tardar a las 7 de la tarde o entonces a las 7 de la noche? ¿Dices que la empresa necesita un buen contable más que (o entonces) nunca?  Algunos ejemplos son más complicados que otros, pero puedes aprender a distinguir entre estos dos términos.  Veamos las diferencias entre ellos.

Sin embargo, las cosas se ponen un poco más complicadas cuando consideramos cómo abreviar esta frase. ¿Es “Le gustan los panecillos más que a mí” o “Le gustan los panecillos más que a mí”?  Los tradicionalistas argumentarán que than es una conjunción, y que el pronombre de la cláusula subordinada debería estar en el caso subjetivo (I, he, she, we, they): a él le gustan los bagels más que a mí. En esta construcción, el lector es capaz de terminar la frase en su mente de forma efectiva y precisa, “más que me gustan los bagels”.

Aunque a menudo podrá transmitir su idea sin problemas con “que yo”, tenga en cuenta que, para los lectores y oyentes atentos, puede introducir una ambigüedad: ¿le gustan a él los panecillos más que a mí? ¿O le gustan más los panecillos que yo? (Una cosa es segura: ¡nos estamos cansando de los bagels!)

Si no es falso

Se ha señalado en los comentarios (gracias, @Quincunx) que donde tienes if foo != bar vs. if not foo == bar el número de operaciones es exactamente el mismo, sólo que el COMPARE_OP cambia y POP_JUMP_IF_TRUE cambia a POP_JUMP_IF_FALSE:

Leer más  Soraya saen de santamaria

@jonrsharpe tiene una excelente explicación de lo que sucede. He pensado en mostrar la diferencia de tiempo al ejecutar cada una de las 3 opciones 10.000.000 veces (suficiente para que se note una ligera diferencia).

En la primera, Python tiene que ejecutar una operación más de las necesarias (en lugar de limitarse a comprobar no igual a, tiene que comprobar si no es cierto que es igual, por lo tanto una operación más). Sería imposible notar la diferencia en una sola ejecución, pero si se ejecuta muchas veces, la segunda sería más eficiente. En general yo usaría la segunda, pero matemáticamente son iguales

Una nota adicional, ya que las otras respuestas respondieron a tu pregunta en su mayoría correctamente, es que si una clase sólo define __eq__() y no __ne__(), entonces tu COMPARE_OP (!=) ejecutará __eq__() y la negará. En ese momento, es probable que su tercera opción sea un poco más eficiente, pero sólo debería considerarse si NECESITA la velocidad, ya que es difícil de entender rápidamente.

Entradas relacionadas