Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using global variables in a function

How can I create or use a global variable in a function?

If I create a global variable in one function, how can I use that global variable in another function? Do I need to store the global variable in a local variable of the function which needs its access?

like image 397
user46646 Avatar asked Jan 08 '09 05:01

user46646


People also ask

Can you use global variables in a function?

Global variables can be used by everyone, both inside of functions and outside.

What is a global variable in a function?

Global variables are defined outside a function, usually on top of the program. Global variables hold their values throughout the lifetime of your program and they can be accessed inside any of the functions defined for the program. A global variable can be accessed by any function.

How do you pass a global variable to a function in 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.


2 Answers

You can use a global variable within other functions by declaring it as global within each function that assigns a value to it:

globvar = 0  def set_globvar_to_one():     global globvar    # Needed to modify global copy of globvar     globvar = 1  def print_globvar():     print(globvar)     # No need for global declaration to read value of globvar  set_globvar_to_one() print_globvar()       # Prints 1 

Since it's unclear whether globvar = 1 is creating a local variable or changing a global variable, Python defaults to creating a local variable, and makes you explicitly choose the other behavior with the global keyword.

See other answers if you want to share a global variable across modules.

like image 87
Paul Stephenson Avatar answered Sep 24 '22 09:09

Paul Stephenson


If I'm understanding your situation correctly, what you're seeing is the result of how Python handles local (function) and global (module) namespaces.

Say you've got a module like this:

# sample.py myGlobal = 5  def func1():     myGlobal = 42  def func2():     print myGlobal  func1() func2() 

You might expecting this to print 42, but instead it prints 5. As has already been mentioned, if you add a 'global' declaration to func1(), then func2() will print 42.

def func1():     global myGlobal     myGlobal = 42 

What's going on here is that Python assumes that any name that is assigned to, anywhere within a function, is local to that function unless explicitly told otherwise. If it is only reading from a name, and the name doesn't exist locally, it will try to look up the name in any containing scopes (e.g. the module's global scope).

When you assign 42 to the name myGlobal, therefore, Python creates a local variable that shadows the global variable of the same name. That local goes out of scope and is garbage-collected when func1() returns; meanwhile, func2() can never see anything other than the (unmodified) global name. Note that this namespace decision happens at compile time, not at runtime -- if you were to read the value of myGlobal inside func1() before you assign to it, you'd get an UnboundLocalError, because Python has already decided that it must be a local variable but it has not had any value associated with it yet. But by using the 'global' statement, you tell Python that it should look elsewhere for the name instead of assigning to it locally.

(I believe that this behavior originated largely through an optimization of local namespaces -- without this behavior, Python's VM would need to perform at least three name lookups each time a new name is assigned to inside a function (to ensure that the name didn't already exist at module/builtin level), which would significantly slow down a very common operation.)

like image 26
Jeff Shannon Avatar answered Sep 22 '22 09:09

Jeff Shannon