DEV Community

Cover image for Learn About the Nonlocal Keyword in Python Programming
Devstories Playground
Devstories Playground

Posted on • Updated on

Learn About the Nonlocal Keyword in Python Programming

In Python, the nonlocal keyword is used within nested functions to modify a variable that exists in a level of scope above the local scope (but not the global scope). This allows inner functions to access and change variables defined in their enclosing functions.

Key Points:

  • Scope: The nonlocal keyword works within the concept of variable scoping in Python. Variables have a defined scope, which determines where they can be accessed and modified.
  • Inner vs. Outer Functions: In nested functions, the inner function has access to local variables within its own scope and the enclosing function's local scope. However, it cannot directly modify variables from the enclosing function's scope by default.
  • Modification: The nonlocal keyword bridges this gap by allowing the inner function to declare a variable as nonlocal, effectively saying, "I want to refer to and modify the variable with this name from the enclosing function's scope.”


def outer_function():
  count = 0

  def inner_function():
    nonlocal count  # Declare count as nonlocal to modify it
    count += 1
    return count

  return inner_function  # Return the inner function

increment = outer_function()  # Call outer_function, which returns inner_function

print(increment())  # Output: 1 (count is modified in the inner function)
print(increment())  # Output: 2 (count retains its modified value)


Enter fullscreen mode Exit fullscreen mode

Detailed Explanation:

  1. The outer_function defines a variable count with an initial value of 0.
  2. Inside outer_function, inner_function is defined as a nested function.
  3. Within inner_function, count is declared as nonlocal. This tells Python that count refers to the same variable defined in outer_function, not a local variable within inner_function.
  4. inner_function increments count by 1 and returns the current value.
  5. outer_function returns inner_function.
  6. We assign the returned function (which modifies count) to increment.
  7. Calling increment() twice executes inner_function twice, modifying count each time. The first call prints 1, and the second prints 2 (the updated value).

When to Usenonlocal:

  • Use nonlocal sparingly, as it can make code less readable and harder to maintain.
  • Consider alternative approaches like passing variables as arguments or using closures (functions that remember state from their enclosing scope) if possible.
  • Use nonlocal when you have a clear need to modify a variable from an enclosing function within a nested function.

Best Practices:

  • Clarity: If you find yourself using nonlocal frequently, it might be a sign that your code structure could be improved. Refactor your code to make the variable access more explicit.
  • Documentation: If you must use nonlocal, add comments to explain why it's necessary.

Let's wrap up things

By understanding the nonlocal keyword and its use cases, you can write more effective and maintainable Python code when dealing with nested functions.

HAPPY CODING 🚀

Image description

Top comments (0)