Function Call Doesn't Update Global Variable
This question explores a programming challenge where a global variable, initially assigned as False, isn't being updated when referenced within a function. Despite the function altering the global variable's value, the main program's loop continues executing, leading to an infinite loop. Understanding this issue requires delving into the concept of namespaces and variable scoping.
Namespace and Variable Scope
In programming, every function and module creates its own namespace. A namespace is a collection of names (variables, functions, etc.) that are known and accessible within that scope. When a variable is assigned a value inside a function, a new variable is created in the function's namespace, even if a global variable with the same name exists.
Using global Variables
In this case, when a global variable called "done" is referenced within the function, a new local variable with the same name is created in the function's namespace. This local "done" is distinct from the global "done." Changing the local "done" has no effect on the global variable.
Solution
To overcome this, the global keyword must be used to explicitly reference the global variable within the function. By using global done, the function tells the interpreter to access the global "done" variable instead of creating a new local one.
Modified Code
To fix the issue, the function can be modified as follows:
<code class="python">def function(): global done for loop: code if not comply: done = True</code>
Explanation
Using global done establishes a connection between the variable used within the function and the global one. When the function modifies the value of done, it updates the same global variable that was referenced initially. This ensures that the main program's while loop will terminate as intended when the function sets done to True.
The above is the detailed content of Why Does Function Call Not Update Global Variable?. For more information, please follow other related articles on the PHP Chinese website!