2010-06-21 22 views
8

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".

+0

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. –

+1

@NickBastin: ¿Qué? 'bar =" changed! "' - Cambié a qué 'barra '' points 'to (está asignado, para ser correcto). –

+0

@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. –

Respuesta

5

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.

+0

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. –

+0

'bar = 0' - Acabo de cambiar la barra (el objeto original al que se asignó' barra' permanece sin afectar). –

-2

¿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?

+0

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. –

+7

El objetivo es ayudar al programador a evitar errores, en la medida de lo posible. De lo contrario, todos escribiríamos todo en ensamblaje. –

+0

@Jeremy Friesner: en Python, la forma "correcta" de hacer esto es simplemente escribir un comentario. – carl

Cuestiones relacionadas