La llamada de función no actualiza la variable global
Esta pregunta explora un desafío de programación donde una variable global, inicialmente asignada como Falsa, no t se actualiza cuando se hace referencia dentro de una función. A pesar de que la función altera el valor de la variable global, el bucle del programa principal continúa ejecutándose, lo que lleva a un bucle infinito. Comprender este problema requiere profundizar en el concepto de espacios de nombres y alcance de variables.
Espacio de nombres y alcance de variables
En programación, cada función y módulo crea su propio espacio de nombres. Un espacio de nombres es una colección de nombres (variables, funciones, etc.) que son conocidos y accesibles dentro de ese ámbito. Cuando a una variable se le asigna un valor dentro de una función, se crea una nueva variable en el espacio de nombres de la función, incluso si existe una variable global con el mismo nombre.
Uso de variables globales
En este caso, cuando se hace referencia a una variable global llamada "hecho" dentro de la función, se crea una nueva variable local con el mismo nombre en el espacio de nombres de la función. Este "hecho" local es distinto del "hecho" global. Cambiar el "hecho" local no tiene ningún efecto en la variable global.
Solución
Para superar esto, se debe usar la palabra clave global para hacer referencia explícita a la variable global dentro la función. Al usar global done, la función le dice al intérprete que acceda a la variable global "done" en lugar de crear una nueva local.
Código modificado
Para solucionar el problema , la función se puede modificar de la siguiente manera:
def function():
global done
for loop:
code
if not comply:
done = True
Explicación
El uso de global done establece una conexión entre la variable utilizada dentro de la función y la global. Cuando la función modifica el valor de done, actualiza la misma variable global a la que se hizo referencia inicialmente. Esto garantiza que el ciclo while del programa principal terminará según lo previsto cuando la función se establezca en Verdadero.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3