Unable to access the updated global variable's value

Viewed 76

Suppose I have two Python files:

  1. abc.py:
from .config import *
update_a()
print_a() # prints 5
print(a)  # prints 2 rather than 5 even after calling update_a() and using global in update_a()
  1. config.py:
a = 2

def update_a():
    global a
    a = 5

def print_a():
    global a
    print(a) # prints 5

The global variable in config.py does not seem to have the updated value when accessed from abc.py.

2 Answers

When you do an import say from .config import *, the variable a is imported as a local scope. Any modification to a will happen within the scope in abc.py NOT in config.py whereas the call to update_a() and print_a() is modifying the variable a within config.py

Adding to Joe's answer, you can achieve what you want with the following piece of code:

import config as config

config.update_a()
config.print_a() # prints 5

# This will print the global variable in 'config.py'
print(config.a)  # prints 5
Related