tipos imprimir entrada declarar datos como python decimal unary-operator

imprimir - ¿Qué hace un signo más frente a una variable en Python?



ord python (2)

Lo que hace ese signo más depende de lo que se define para hacer por el resultado de esa expresión (se llama al método __pos__() ese objeto). En este caso, es un objeto Decimal , y el plus unario es equivalente a llamar al método plus() . Básicamente, se utiliza para aplicar el contexto actual (precisión, redondeo, etc.) sin cambiar el signo del número. Busque una setcontext() a setcontext() o localcontext() otro lugar para ver cuál es el contexto. Para más información, ver aquí .

El plus unario no se usa muy a menudo, por lo que no es sorprendente que este uso no sea familiar. Creo que el módulo decimal es el único módulo estándar que lo usa.

Hay un poco del siguiente código de Python en un proyecto que debo mantener:

# If the `factor` decimal is given, compute new price and a delta factor = +factor.quantize(TWOPLACES) new_price = +Decimal(old_price * factor).quantize(TWOPLACES) delta = new_price - old_price

La pregunta aquí es el propósito de + delante de una variable.

Los documentos de Python lo call operador unario más , que "produce su argumento numérico sin cambios". ¿Se puede quitar con seguridad entonces?

(Por cierto, el código fue escrito por mí hace algún tiempo, ojalá haya aprendido la lección; no sería una pregunta si existieran pruebas o si el uso de unary plus en un decimal se aclarara en los comentarios).


Me encontré con este mismo problema cuando asumí erróneamente que Python debe ser compatible con el operador de incremento de C (++); no lo hace En su lugar, aplica el operador de signo más (+) dos veces! Lo que no hace nada dos veces, pronto lo aprendí. Sin embargo, como "++ n" parecía válido ... no marcado como un error de sintaxis ... creé un error terrible para mí.

Entonces, a menos que redefines lo que hace, unary + en realidad no hace nada. Unario: cambia de positivo a negativo y viceversa, por lo que "--n" tampoco se marca como un error de sintaxis, pero tampoco hace nada.