KoderSolution Logo
HomeArticlesTutorialsForumAI LabRun Code
KoderSolution Logo

The world’s most advanced technical ecosystem for modern software engineers. Learn, build, and grow with next-generation developer tools and resources.

Engineering Newsletter

Join 100,000+ engineers receiving curated high-signal content weekly.

Platforms

  • Technical Articles
  • Interactive Tutorials
  • AI Coding Lab
  • Developer Forum
  • Developer Tools

Pages

  • About Us
  • Contact Us
  • Privacy Policy
  • Terms of Service
  • Refund Policy
  • Disclaimer
  • Advertisement

Popular Topics

  • PHP
  • Laravel
  • Python
  • React.Js
  • MySQL
© 2026 KoderSolutionAll Rights Reserved
Developed Bymaksudur.dev
🐍

Python

Topic Hub & Articles

Python Intro

10 min

Python Getting Started

10 min

Python Syntax

10 min

Recap Quiz

5 Questions

Python Comments

10 min

Python Variables

10 min

Python Data Types

10 min

Recap Quiz

5 Questions

Python Numbers

10 min

Python Casting

10 min

Python Strings

10 min

Recap Quiz

5 Questions

Python Booleans

10 min

Python Operators

10 min

Python Lists

10 min

Recap Quiz

5 Questions

Python Tuples

10 min

Python Sets

10 min

Python Dictionaries

10 min

Recap Quiz

5 Questions

Python If...Else

10 min

Python While Loops

10 min

Python For Loops

10 min

Recap Quiz

5 Questions

Python Functions

10 min

Python Lambda

10 min

Python Arrays

10 min

Recap Quiz

5 Questions

Python Classes/Objects

10 min

Python Inheritance

10 min

Python Iterators

10 min

Python Scope

10 min

Recap Quiz

5 Questions

Python Modules

10 min

Recap Quiz

5 Questions

Python Dates

10 min

Python Math

10 min

Python JSON

10 min

Recap Quiz

5 Questions

Python RegEx

10 min

Python PIP

10 min

Python Try...Except

10 min

Recap Quiz

5 Questions

Python User Input

10 min

Python String Formatting

10 min

Python Scope

10 min

Python Iterators

10 min

Recap Quiz

5 Questions

Python Polymorphism

10 min

Python Math Module

10 min

Python Random Module

10 min

Recap Quiz

5 Questions

Python JSON Module

10 min

Python RegEx Module

10 min

Python PIP Package Manager

10 min

Python File Handling

10 min

Recap Quiz

5 Questions

Python Read Files

10 min

Python Write/Create Files

10 min

Python Delete Files

10 min

Python Directory Management

10 min

ML Intro

10 min

Recap Quiz

5 Questions

ML Mean Median Mode

10 min

ML Standard Deviation

10 min

ML Percentile

10 min

Recap Quiz

5 Questions

ML Data Distribution

10 min

ML Linear Regression

10 min

ML Polynomial Regression

10 min

Recap Quiz

5 Questions

ML Multiple Regression

10 min

ML Scale

10 min

ML Train/Test

10 min

ML Decision Tree

10 min

Progress
0%

0 / 58 Lessons

PythonPython Tutorial
Lesson

Python Scope

10 min reading
Free Course

Advanced Python Scope: Closures & Nonlocal State Mutation

A closure is a nested function that retains access to variables from its enclosing lexical scope even after the outer function has finished executing.

Closure Memory Binding

flowchart LR
    subgraph Enclosing Function Scope
        var["cell reference: rate = 0.15"]
    end
    subgraph Returned Inner Function
        closure["closure_fn(amount)"]
    end
    closure -->|__closure__| var

Requirements for a Closure

  1. A nested function exists inside an outer enclosing function.
  2. The nested function references a variable defined in the outer function.
  3. The outer function returns the nested function reference.

Practical Code Example

from typing import Callable

def create_tax_calculator(tax_rate: float) -> Callable[[float], float]:
    """Factory function generating closure tax calculators."""
    # Enclosing variable 'tax_rate' is captured in the closure
    def calculate_tax(amount: float) -> float:
        return round(amount * tax_rate, 2)

    return calculate_tax

def create_accumulator(initial_value: int = 0) -> Callable[[int], int]:
    """Closure maintaining mutable state via 'nonlocal'."""
    state = initial_value

    def add(value: int) -> int:
        nonlocal state  # Mutate captured enclosing variable
        state += value
        return state

    return add

if __name__ == "__main__":
    vat_calculator = create_tax_calculator(0.20)
    sales_tax_calculator = create_tax_calculator(0.07)

    print(f"VAT on $100: ${vat_calculator(100.0)}")
    print(f"Sales Tax on $100: ${sales_tax_calculator(100.0)}")

    counter = create_accumulator(10)
    print("Accumulator +5:", counter(5))   # 15
    print("Accumulator +20:", counter(20)) # 35

Best Practices & Gotchas

  • Late Binding in Closures: Inner functions bind variable names, not values, at lookup time. Beware of creating closures inside loops ([lambda: i for i in range(5)] binds i=4 for all lambdas!).
  • Use functools.partial for Simple Currying: For simple function argument binding without mutable state, prefer functools.partial.
  • Inspect Closures: You can inspect captured closure variables via fn.__closure__[0].cell_contents.

Self-Check Challenge

Write a function make_multiplier(n: int) returning a closure function that multiplies its input parameter by n.

Save Your Progress

Unlock Your
Full Potential.

Sign in to track your learning journey, earn industry-recognized certificates, and join our elite developer community.

Quick Access With

Enterprise-Grade Security Protocol

Recommended Courses & Books

Stuck on this lesson?

Join our community of senior developers.

Ask in Forum