Python function not changing variable

my code is as follow:

done = False

def function():
    for loop:
        code
        if not comply:
            done = True  #let's say that the code enters this if-statement

while done == False:
    function()

For some reason when my code enters the if statement, it doesn't exit the while loop after it's done with function().

BUT, if I code it like this:

done = False

while done == False:
    for loop:
    code
    if not comply:
        done = True  #let's say that the code enters this if-statement

...it exits the while loop. What's going on here?

I made sure that my code enters the if-statement. I haven't run the debugger yet because my code has a lot of loops (pretty big 2D array) and I gave up on debugging due to it being so tedious. How come "done" isn't being changed when it's in a function?

Python function not changing variable

codeforester

35.6k15 gold badges99 silver badges125 bronze badges

asked Sep 30, 2012 at 23:21

1

Your issue is that functions create their own namespace, which means that done within the function is a different one than done in the second example. Use global done to use the first done instead of creating a new one.

def function():
    global done
    for loop:
        code
        if not comply:
            done = True

An explanation of how to use global can be found here

answered Sep 30, 2012 at 23:23

done=False
def function():
    global done
    for loop:
        code
        if not comply:
            done = True

you need to use the global keyword to let the interpreter know that you refer to the global variable done, otherwise it's going to create a different one who can only be read in the function.

Python function not changing variable

Tim

40.3k18 gold badges126 silver badges142 bronze badges

answered Sep 30, 2012 at 23:23

Python function not changing variable

Ionut HulubIonut Hulub

5,9275 gold badges26 silver badges53 bronze badges

Use global, only then you can modify a global variable otherwise a statement like done = True inside the function will declare a new local variable named done:

done = False
def function():
    global done
    for loop:
        code
        if not comply:
            done = True

Read more about the global statement.

answered Sep 30, 2012 at 23:23

Python function not changing variable

Ashwini ChaudharyAshwini Chaudhary

236k55 gold badges443 silver badges495 bronze badges

Using a class rather than global:

Another way to handle (not use) global variables is to wrap the functions and variables you wish to be global in a class.

While this is a little heavy for this specific case - classes add a host of functionality and flexability to the project. (Personally) highly recommended.

For example:

class Processor():
    """Class container for processing stuff."""

    _done = False

    def function(self):
        """A function which processes stuff."""
        # Some code here ...
        self._done = True

# See the flag changing.
proc = Processor()
print('Processing complete:', proc._done)
proc.function()
print('Processing complete:', proc._done)

Output:

Processing complete: False
Processing complete: True

answered Jan 21, 2020 at 9:35

Python function not changing variable

S3DEVS3DEV

7,6753 gold badges27 silver badges36 bronze badges

How do you change a variable in a function Python?

Use of “global†keyword to modify global variable inside a function. If your function has a local variable with same name as global variable and you want to modify the global variable inside function then use 'global' keyword before the variable name at start of function i.e.

Can Python functions change global variables?

A print statement inside the function should print the updated value of x . In python, a function can only access and print a global variable . We need to tell the function referring for any assignment or change to the global variable .

Can a function update a global variable?

Functions can access global variables and modify them. Modifying global variables in a function is considered poor programming practice. It is better to send a variable in as a parameter (or have it be returned in the 'return' statement).

How do you overwrite variables in Python?

Python Variables.
Assignment like x = 10 above sets a pointer into that variable, pointing to the value..
Assignment like y = 'bye' above, where the variable has an existing pointer in it, overwrites the existing pointer with the new one..