Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Global variable not working from module function in ipython

I'm sure someone's already answered this, but I can't find it.

I have a script test.py who's sole purpose of existence is to place the variable var into the global namespace:

def test():
    global var
    var = 'stuff'

Here's what happens when I run test.py in ipython using %run, then run test(), and then try to access var.

Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: %run test.py

In [2]: test()

In [3]: var
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-3-84ddba356ca3> in <module>()
----> 1 var

NameError: name 'var' is not defined

In [4]:

Any idea what's happening? Or how to generally bring it into the local namespace?

like image 233
James Wright Avatar asked Dec 01 '25 23:12

James Wright


1 Answers

The %run command creates a separate namespace for global variables in the file. It also updates the IPython interactive namespace with all variables defined in the file after execution. So you can either call the function in your script so that the global variable gets created before the file finishes executing:

def test():
    global var
    var = 'stuff'
test()

or use %run -i:

-i run the file in IPython’s namespace instead of an empty one. This is useful if you are experimenting with code written in a text editor which depends on variables defined interactively.

like image 168
Eugene Yarmash Avatar answered Dec 03 '25 14:12

Eugene Yarmash