He sobrecargado algunos operadores de Python, aritmética y booleana. Las reglas de precedencia de Python siguen vigentes, lo que no es natural para los operadores sobrecargados, lo que genera muchos paréntesis en las expresiones. ¿Hay alguna manera de "sobrecargar" las precedencias de Python?Cambiar la precedencia del operador en Python
Respuesta
No. Es parte del lenguaje python en sí. Así es como el lenguaje analiza.
cotización oficial: Evaluation order
Python evalúa las expresiones de izquierda a derecha. Observe que mientras evalúa una tarea, el lado derecho se evalúa antes del lado izquierdo.
Otras citas:
Python:Basics:Numbers and operators
Al realizar operaciones matemáticas con los operadores mixtos, es importante tener en cuenta que Python determina las operaciones que debe realizar primero, basado en un pre-determinado precedencia. Esta precedencia sigue una prioridad similar a para la mayoría de los lenguajes de programación.
Tenga en cuenta que Python se adhiere a la PEMDAS order of operations.
El problema principal es que python aplica la precedencia del operador al analizar el código.En ese momento temprano, Python no puede saber qué tipos de objetos están realmente involucrados en la expresión (ya que el código aún no se ha ejecutado). Por lo tanto, si fuera posible cambiar la precedencia del operador, lo haría para todas las expresiones, incluidas las expresiones matemáticas comunes. Ahora imagine qué tipo de caos se produciría en la biblioteca estándar y en cualquier biblioteca de terceros si esto fuera posible. – liori
@liori: ¡Buena adición! No podría usar ningún código de terceros mezclado con el suyo bajo el mismo intérprete alterado – jdi
Gracias jdi no solo por decir lo que hace Python, sino por explicar por qué no es posible hacer lo que me gustaría hacer. –
puede hacer trampa que el mecanismo de esta manera:
- Ignorar todos los operadores a no hacer los cálculos, pero lista de instrucciones envueltas en algún objeto crear.
- Agregue su propio operador de corchete (es decir, como una función
_
).
Ejemplo:
>>> a = MyNumber(5); b = MyNumber(2); c = MyNumber(3)
>>> a + b * c
MyExpression([MyNumber(5), '+', MyNumber(2), '*', MyNumber(3)])
Soportes:
>>> a + _(b * c)
Tenga en cuenta que _
es una función que evalúa la expresión (en orden a hacer cumplir en ella)
Así que si se invierte priorites obtendrá:
>>> _(a + b * c)
MyNumber(21)
PS. Django hace un truco similar con los operadores Q
y F
.
- 1. Cambiar la precedencia del operador
- 2. ANTLR Precedencia del operador
- 3. Precedencia del operador lógico SQL: Yy O
- 4. operador de precedencia
- 5. ¿Cuál es la precedencia del operador de coma dentro del operador condicional en C++?
- 6. Precedente del operador de Python
- 7. Qué operador lógico toma precedencia
- 8. Haskell operador vs función precedencia
- 9. ¿Cuál es la precedencia del operador del operador C# null-coalescing (??)?
- 10. Operador de conversión frente a operador de conversión: precedencia
- 11. Precedencia de Haskell: Lambda y el operador
- 12. precedencia de operador extraño con ?? (operador coalescente nulo)
- 13. operador del conjunto "en" Python
- 14. Scala - Precedencia del método
- 15. ¿La precedencia del operador en C++ difiere para los punteros y los iteradores?
- 16. ¿Dónde está documentada la precedencia del operador para la clase .NET Regex?
- 17. Precedencia del dominio de cookies?
- 18. ¿Cuál es el orden de precedencia del operador en Visual Basic 6.0?
- 19. Operadores booleanos precedencia
- 20. Reglas para cuándo usar la sobrecarga del operador en python
- 21. incremento del puntero y la precedencia de encadenamiento en C#
- 22. ¿Cuál es la precedencia del evento en JavaScript?
- 23. Sobrecarga del operador en python con el objeto en el lado derecho del operador
- 24. Operador condicional en Python?
- 25. Prioridad del operador para And/&& en Ruby
- 26. ¿Cuál es la precedencia de los archivos compilados de python en las importaciones?
- 27. ¿Cuál es la asociatividad del operador de Python **?
- 28. ANTLR3 lexer precedencia
- 29. asignar operador a la variable en python?
- 30. ¿Cambiar la configuración del proxy del navegador desde Python?
No. Es parte del lenguaje python en sí. Así es como el lenguaje analiza. – jdi
@jdi Esa es una respuesta, ¿por qué no hacerlo uno? – kojiro
@kojiro: Bueno, solo porque no pude encontrar un enlace a los documentos oficiales de Python indicando que no se puede cambiar. Sin embargo, encontré toneladas de enlaces de terceros. – jdi