tengo un método:Python: ¿alguna forma de declarar parámetros constantes?
def foo(bar):
# ...
¿Hay una manera de marcar bar
tan constante? Tales como "El valor en bar
no puede cambiar" o "El objeto apuntado por bar
no puede cambiar".
tengo un método:Python: ¿alguna forma de declarar parámetros constantes?
def foo(bar):
# ...
¿Hay una manera de marcar bar
tan constante? Tales como "El valor en bar
no puede cambiar" o "El objeto apuntado por bar
no puede cambiar".
Si la barra es un objeto inmutable, la barra no cambiará durante la función.
También puede crear su propio objeto constante. The recipie here.
Tenga en cuenta que interceptar modificaciones no resuelve el problema por sí mismo. ¿Cómo sabes que el código del cliente no encontrará un ConstError? Solo con suficientes pruebas. –
'bar = 0' - Acabo de cambiar la barra (el objeto original al que se asignó' barra' permanece sin afectar). –
Nº
¿Cuál es el punto? Si está escribiendo la función, ¿no está hasta usted para asegurarse de que bar
no cambie? O si llamas a la función, ¿a quién le importa?
A menudo es una cuestión útil de política: informa al usuario sobre una limitación de su función. Por supuesto, esto no tiene tanto sentido en Python, ya que no hay prototipos, y tampoco existe un compilador estático para hacer cumplir la restricción. –
El objetivo es ayudar al programador a evitar errores, en la medida de lo posible. De lo contrario, todos escribiríamos todo en ensamblaje. –
@Jeremy Friesner: en Python, la forma "correcta" de hacer esto es simplemente escribir un comentario. – carl
Las referencias son siempre 'const', pero los valores no son (no se puede cambiar a qué 'barra' apunta, pero si' bar' es mutable, puede cambiar su' valor). Por supuesto, esto no es * realmente * cierto, ya que puedes lidiar con el marco de apilamiento de tus padres y cambiar a lo que apunta 'barra', pero asumiendo que no recurres a tal hacker la regla generalmente se aplica. –
@NickBastin: ¿Qué? 'bar =" changed! "' - Cambié a qué 'barra '' points 'to (está asignado, para ser correcto). –
@EthanFurman: No exactamente. Mi punto es que no puede cambiar las referencias a 'barras' en el marco de la pila primaria; por supuesto, puede asignar el nombre' bar' localmente para ocultar el objeto que se le pasó, pero ese objeto aún existe y permanece sin cambios en el padre. –