Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Clarity on global variables
#2
The global is only required if you do an assignment.

Assign the int 42 to the name a
a = 42
An assignment inside a function is in function scope and does not affect module scope.
a = 42


def foo():
    a = 13
    print(a)


foo()      # prints 13
print(a)  # prints 42
Now the same with global:
a = 42


def foo():
    global a
    # a is now assigned on module scope
    a = 13
    print(a)


foo()      # prints 13
print(a)  # prints 13
If you have mutable objects, then you don't need global.
my_list = [1, 2, 3]


def sideeffect():
    # here is no assignment
    # instead the mutable object is modified inline
    my_list.append(10)


print(my_list) # [1, 2, 3]
sideeffect()
print(my_list) # [1, 2, 3, 10]
You can mutate mutable objects on module scope from a function without the use of global.
I named the function sideeffect because the function is causing a side effect. my_list is modified on module scope.

The best way to get rid of global are classes. A class holds state and has methods, which are doing something with the state. The instances of classes are isolated from each other.

class MyList:
    """
    Usually a class has more than one method.
    This is a very minimal example.
    """
    def __init__(self, elements=None):
        # self is the instance of the class and elements holds the list, which
        # was created during instantiation (__init__) 
        self.elements = elements or []  # if elements is None, then [] is assigned to self.elements

    def add(self):
        self.elements.append(10)

l1 = MyList()
l2 = MyList()

l1.add()
l1.add()
l2.add()

print(l1.elements) # [10, 10]
print(l2.elements) # [10]
You should read this article: https://realpython.com/python-scope-legb...-namespace
It explains the different namespaces and some Python internals.
JonWayn and Larz60+ like this post
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Reply


Messages In This Thread
Clarity on global variables - by JonWayn - Nov-25-2022, 10:44 AM
RE: Clarity on global variables - by DeaD_EyE - Nov-25-2022, 11:29 AM
RE: Clarity on global variables - by JonWayn - Nov-26-2022, 12:10 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Trying to understand global variables 357mag 5 1,168 May-12-2023, 04:16 PM
Last Post: deanhystad
  Global variables or local accessible caslor 4 1,059 Jan-27-2023, 05:32 PM
Last Post: caslor
  global variables HeinKurz 3 1,176 Jan-17-2023, 06:58 PM
Last Post: HeinKurz
  I need some clarity on the use of the open command JonWayn 11 2,507 Nov-08-2022, 11:46 PM
Last Post: JonWayn
  Global variables not working hobbyist 9 4,783 Jan-16-2021, 03:17 PM
Last Post: jefsummers
  Global vs. Local Variables Davy_Jones_XIV 4 2,690 Jan-06-2021, 10:22 PM
Last Post: Davy_Jones_XIV
  Global - local variables Motorhomer14 11 4,305 Dec-17-2020, 06:40 PM
Last Post: Motorhomer14
  Question regarding local and global variables donmerch 12 5,168 Apr-12-2020, 03:58 PM
Last Post: TomToad
  local/global variables in functions abccba 6 3,465 Apr-08-2020, 06:01 PM
Last Post: jefsummers
  Where to put the global keyword when assigning variables outside a function? new_to_python 8 3,072 Feb-09-2020, 02:05 PM
Last Post: new_to_python

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020