Python 闭包实现的计数器,每调用一次就 +1,多个计数器之间互不干扰

Python 闭包实现的计数器,每调用一次就 +1,多个计数器之间互不干扰

flyfish

cpp 复制代码
How Closures are Created
A closure is formed when:

	A function is defined inside another function (nested function).
	The inner function references variables from the outer function.
	The outer function returns the inner function.
cpp 复制代码
闭包是如何形成的
三个形成条件
	一个函数定义在另一个函数内部(这就是嵌套函数)。
	内部函数引用了外部函数的变量(自由变量)。
	外部函数将内部函数返回。

举例

cpp 复制代码
def say():
    greeting = 'Hello'

    def display():
        print(greeting)

    display()

闭包就是其中的

cpp 复制代码
greeting = 'Hello'

def display():
    print(greeting)

实现计数器,每调用一次就 +1,多个计数器之间互不干扰

实现方式1

nonlocal = 非局部

在嵌套 / 内部函数中,声明要修改的变量来 自外层函数 ,既不是当前函数的局部变量,也不是全局变量。

python 复制代码
def create_counter():
    # 自由变量:只属于当前闭包的状态
    count = 0

    # 嵌套内部函数
    def add():
        # 引用外部作用域的变量 count
        nonlocal count
        count += 1
        return count

    # 外部函数返回内部函数
    return add


# 创建两个独立的计数器
counter1 = create_counter()
counter2 = create_counter()

# 各自计数,互不干扰
print(counter1())  # 1
print(counter1())  # 2
print(counter1())  # 3

print(counter2())  # 1
print(counter2())  # 2

实现方式2

python 复制代码
def create_counter():
    # 用可变对象列表存储计数(绕过lambda不能赋值/nonlocal的限制)
    count = [0]
    # 返回 lambda 匿名函数(闭包:引用外部自由变量 count)
    return lambda: (count.__setitem__(0, count[0] + 1), count[0])[1]

# 创建两个独立计数器
counter1 = create_counter()
counter2 = create_counter()

# 执行结果和原版完全一致!
print(counter1())  # 1
print(counter1())  # 2
print(counter1())  # 3

print(counter2())  # 1
print(counter2())  # 2

实现方式3

python 复制代码
def create_counter():
    count = [0]
    return lambda: (count.__setitem__(0, count[0] + 1), count[0])[1]

# 创建两个独立计数器
counter1 = create_counter()
counter2 = create_counter()

# 执行结果和原版完全一致!
print(counter1())  # 1
print(counter1())  # 2
print(counter1())  # 3

print(counter2())  # 1
print(counter2())  # 2
    
    
相关推荐
2601_962294611 小时前
Python接口自动化测试实战:使用requests库
python·接口自动化测试·异常处理·requests库·api测试
砚底藏山河1 小时前
【量化纯GET实战 #23】多股票相关性:用收益率看板块联动
java·数据库·python·金融·数据分析
阿童木写作1 小时前
跨境电商翻译工具推荐:批量图片翻译+视频字幕实时翻译
人工智能·python·音视频
晶捷软件1 小时前
晶捷智能:集团型制造企业ERP如何实现多工厂统一管控
大数据·人工智能·python·制造
oyguyteggytrrwwwrt1 小时前
闵可夫斯基差演示
python
智购科技无人售货机工厂店1 小时前
2026自动售货机大屏交互设计原则:从信息层级到视觉动线的工程实践~YH
运维·python·单片机·嵌入式硬件·自动化·交互
quantdash_cc1 小时前
量化数据源怎么选:稳定性、实时性和数据完整性到底该如何权衡?
开发语言·python·数据分析·量化交易·股票数据·quantdash
hfywmsj2 小时前
广州餐饮铺位招租数据分析:选址权重模型与租金评估实操
人工智能·python·数据分析·广州餐饮铺位招租
cui_ruicheng2 小时前
FastAPI 应用开发(一):FastAPI、路由参数与交互式 API 文档
python·fastapi
小柯南敲键盘2 小时前
跨境电商翻译工具,AI批量图片及视频字幕翻译
大数据·人工智能·python·音视频