Global Scope Outside Functions
๐ท๏ธ Functions / Variable Scope
๐ฑ Context Introduction
When you define a variable outside of any function in Python, that variable lives in the global scope. This means it can be accessed from anywhere in your script โ both inside and outside of functions. Understanding how global scope works is essential for writing clean, predictable code and avoiding accidental variable modifications.
โ๏ธ What Is Global Scope?
A variable created at the top level of your script (not inside any function or class) is called a global variable. It exists for the entire lifetime of your program and is visible to all parts of your code.
Key characteristics: - Defined outside any function or class - Accessible from anywhere in the script - Can be read inside functions without special keywords - To modify a global variable inside a function, you must use the global keyword
๐ Reading Global Variables Inside Functions
You can read a global variable inside a function without any extra syntax. Python will look for the variable in the local scope first, then in the enclosing scopes, and finally in the global scope.
Example: - Define a variable server_name = "web-prod-01" at the top of your script - Inside a function called print_server(), simply reference server_name - The function will print "Server: web-prod-01" without any errors
This works because Python automatically searches the global scope when it cannot find the variable locally.
๐ ๏ธ Modifying Global Variables Inside Functions
If you try to assign a new value to a global variable inside a function without declaring it as global, Python will create a new local variable with the same name instead. This is a common source of bugs.
Example of unintended behavior: - Global variable count = 10 - Inside function update_count(), write count = count + 1 - Python will throw an UnboundLocalError because it sees an assignment and treats count as local, but it hasn't been defined locally yet
To fix this, you must explicitly declare the variable as global using the global keyword.
Correct approach: - Inside the function, write global count before modifying it - Then assign count = count + 1 - The global variable is now updated successfully
๐ต๏ธ The global Keyword Explained
The global keyword tells Python that a variable inside a function refers to the global version, not a local one.
Rules to remember: - Use global only when you need to reassign a global variable - You do not need global to read or modify mutable objects like lists or dictionaries - Using global too often can make code harder to debug and maintain
Example with a list: - Global list ports = [80, 443] - Inside function add_port(), write ports.append(8080) - This works without global because you are modifying the list, not reassigning it
Example with reassignment: - Global variable status = "active" - Inside function change_status(), write global status then status = "inactive" - This correctly updates the global variable
๐ Comparison: Reading vs. Modifying Global Variables
| Action | Inside Function | Keyword Needed? | Behavior |
|---|---|---|---|
| Read a global variable | print(server_name) | No | Python finds it in global scope |
| Modify a mutable global object | ports.append(8080) | No | Object is modified in place |
| Reassign a global variable | count = count + 1 | Yes โ use global count | Without global, creates a local variable |
| Create a new global from inside a function | global new_var then new_var = 100 | Yes | Variable becomes globally accessible |
โ ๏ธ Common Pitfalls and Best Practices
Pitfall 1: Accidentally creating a local variable - You have a global timeout = 30 - Inside a function, you write timeout = timeout + 10 - Python raises an error because it treats timeout as local but it's not defined locally
Pitfall 2: Overusing global variables - Too many global variables make code unpredictable - Functions become dependent on external state - Testing and debugging become more difficult
Best practices: - Use global variables sparingly, mainly for configuration constants - Prefer passing values as function arguments instead - If you must modify a global, document it clearly with comments - Consider using a config dictionary or a class to group related global values
๐งช Simple Example Walkthrough
Step 1: Define a global variable at the top of your script - app_name = "MonitorTool"
Step 2: Create a function that reads the global variable - def show_app(): - Inside, write print(f"Application: {app_name}") - Call show_app() โ it prints "Application: MonitorTool"
Step 3: Create a function that modifies the global variable - def rename_app(new_name): - Inside, write global app_name then app_name = new_name - Call rename_app("HealthChecker") - Call show_app() again โ it now prints "Application: HealthChecker"
This demonstrates how global variables persist across function calls and can be intentionally updated when needed.
๐ Key Takeaways
- Global variables are defined outside any function and are accessible everywhere
- Reading a global inside a function requires no special keyword
- Reassigning a global inside a function requires the global keyword
- Modifying a mutable global object (like a list or dict) does not require global
- Use global variables intentionally and sparingly for cleaner, more maintainable code
Variables defined outside any function exist in the global scope and can be accessed from anywhere in the file.
๐ง Example 1: Defining a global variable and printing it
A variable created at the top level of a script is global and available everywhere.
message = "Hello from global scope"
print(message)
๐ค Output: Hello from global scope
๐ง Example 2: Accessing a global variable inside a function
Functions can read global variables without any special declaration.
temperature = 25
def show_temperature():
print(temperature)
show_temperature()
๐ค Output: 25
๐ง Example 3: Modifying a global variable outside a function
Global variables can be changed directly by assignment at the top level.
counter = 0
print(counter)
counter = 10
print(counter)
๐ค Output: 0
๐ค Output: 10
๐ง Example 4: Multiple functions reading the same global variable
All functions in a file share access to the same global variable.
app_name = "SensorMonitor"
def print_app():
print(app_name)
def log_app():
print("Logging from:", app_name)
print_app()
log_app()
๐ค Output: SensorMonitor
๐ค Output: Logging from: SensorMonitor
๐ง Example 5: Global variable used as a shared configuration value
Engineers often use global variables to store settings that multiple functions need.
max_retries = 3
def connect():
print("Attempting connection...")
for attempt in range(max_retries):
print(f"Retry {attempt + 1}")
def reset():
print("Resetting with max retries:", max_retries)
connect()
reset()
๐ค Output: Attempting connection...
๐ค Output: Retry 1
๐ค Output: Retry 2
๐ค Output: Retry 3
๐ค Output: Resetting with max retries: 3
๐ Comparison: Global vs Local Scope
| Feature | Global Scope | Local Scope |
|---|---|---|
| Defined where | Outside any function | Inside a function |
| Accessible from | Anywhere in file | Only inside that function |
| Lifetime | Entire program runs | Only while function runs |
| Example use | Configuration values | Temporary loop variables |
๐ฑ Context Introduction
When you define a variable outside of any function in Python, that variable lives in the global scope. This means it can be accessed from anywhere in your script โ both inside and outside of functions. Understanding how global scope works is essential for writing clean, predictable code and avoiding accidental variable modifications.
โ๏ธ What Is Global Scope?
A variable created at the top level of your script (not inside any function or class) is called a global variable. It exists for the entire lifetime of your program and is visible to all parts of your code.
Key characteristics: - Defined outside any function or class - Accessible from anywhere in the script - Can be read inside functions without special keywords - To modify a global variable inside a function, you must use the global keyword
๐ Reading Global Variables Inside Functions
You can read a global variable inside a function without any extra syntax. Python will look for the variable in the local scope first, then in the enclosing scopes, and finally in the global scope.
Example: - Define a variable server_name = "web-prod-01" at the top of your script - Inside a function called print_server(), simply reference server_name - The function will print "Server: web-prod-01" without any errors
This works because Python automatically searches the global scope when it cannot find the variable locally.
๐ ๏ธ Modifying Global Variables Inside Functions
If you try to assign a new value to a global variable inside a function without declaring it as global, Python will create a new local variable with the same name instead. This is a common source of bugs.
Example of unintended behavior: - Global variable count = 10 - Inside function update_count(), write count = count + 1 - Python will throw an UnboundLocalError because it sees an assignment and treats count as local, but it hasn't been defined locally yet
To fix this, you must explicitly declare the variable as global using the global keyword.
Correct approach: - Inside the function, write global count before modifying it - Then assign count = count + 1 - The global variable is now updated successfully
๐ต๏ธ The global Keyword Explained
The global keyword tells Python that a variable inside a function refers to the global version, not a local one.
Rules to remember: - Use global only when you need to reassign a global variable - You do not need global to read or modify mutable objects like lists or dictionaries - Using global too often can make code harder to debug and maintain
Example with a list: - Global list ports = [80, 443] - Inside function add_port(), write ports.append(8080) - This works without global because you are modifying the list, not reassigning it
Example with reassignment: - Global variable status = "active" - Inside function change_status(), write global status then status = "inactive" - This correctly updates the global variable
๐ Comparison: Reading vs. Modifying Global Variables
| Action | Inside Function | Keyword Needed? | Behavior |
|---|---|---|---|
| Read a global variable | print(server_name) | No | Python finds it in global scope |
| Modify a mutable global object | ports.append(8080) | No | Object is modified in place |
| Reassign a global variable | count = count + 1 | Yes โ use global count | Without global, creates a local variable |
| Create a new global from inside a function | global new_var then new_var = 100 | Yes | Variable becomes globally accessible |
โ ๏ธ Common Pitfalls and Best Practices
Pitfall 1: Accidentally creating a local variable - You have a global timeout = 30 - Inside a function, you write timeout = timeout + 10 - Python raises an error because it treats timeout as local but it's not defined locally
Pitfall 2: Overusing global variables - Too many global variables make code unpredictable - Functions become dependent on external state - Testing and debugging become more difficult
Best practices: - Use global variables sparingly, mainly for configuration constants - Prefer passing values as function arguments instead - If you must modify a global, document it clearly with comments - Consider using a config dictionary or a class to group related global values
๐งช Simple Example Walkthrough
Step 1: Define a global variable at the top of your script - app_name = "MonitorTool"
Step 2: Create a function that reads the global variable - def show_app(): - Inside, write print(f"Application: {app_name}") - Call show_app() โ it prints "Application: MonitorTool"
Step 3: Create a function that modifies the global variable - def rename_app(new_name): - Inside, write global app_name then app_name = new_name - Call rename_app("HealthChecker") - Call show_app() again โ it now prints "Application: HealthChecker"
This demonstrates how global variables persist across function calls and can be intentionally updated when needed.
๐ Key Takeaways
- Global variables are defined outside any function and are accessible everywhere
- Reading a global inside a function requires no special keyword
- Reassigning a global inside a function requires the global keyword
- Modifying a mutable global object (like a list or dict) does not require global
- Use global variables intentionally and sparingly for cleaner, more maintainable code
Interactive Views
You are currently in ๐ All-in-One mode. Use the tabs at the top to switch to ๐ Theory Only or ๐ป Code Only views.
Variables defined outside any function exist in the global scope and can be accessed from anywhere in the file.
๐ง Example 1: Defining a global variable and printing it
A variable created at the top level of a script is global and available everywhere.
message = "Hello from global scope"
print(message)
๐ค Output: Hello from global scope
๐ง Example 2: Accessing a global variable inside a function
Functions can read global variables without any special declaration.
temperature = 25
def show_temperature():
print(temperature)
show_temperature()
๐ค Output: 25
๐ง Example 3: Modifying a global variable outside a function
Global variables can be changed directly by assignment at the top level.
counter = 0
print(counter)
counter = 10
print(counter)
๐ค Output: 0
๐ค Output: 10
๐ง Example 4: Multiple functions reading the same global variable
All functions in a file share access to the same global variable.
app_name = "SensorMonitor"
def print_app():
print(app_name)
def log_app():
print("Logging from:", app_name)
print_app()
log_app()
๐ค Output: SensorMonitor
๐ค Output: Logging from: SensorMonitor
๐ง Example 5: Global variable used as a shared configuration value
Engineers often use global variables to store settings that multiple functions need.
max_retries = 3
def connect():
print("Attempting connection...")
for attempt in range(max_retries):
print(f"Retry {attempt + 1}")
def reset():
print("Resetting with max retries:", max_retries)
connect()
reset()
๐ค Output: Attempting connection...
๐ค Output: Retry 1
๐ค Output: Retry 2
๐ค Output: Retry 3
๐ค Output: Resetting with max retries: 3
๐ Comparison: Global vs Local Scope
| Feature | Global Scope | Local Scope |
|---|---|---|
| Defined where | Outside any function | Inside a function |
| Accessible from | Anywhere in file | Only inside that function |
| Lifetime | Entire program runs | Only while function runs |
| Example use | Configuration values | Temporary loop variables |