Files
python/20-24/17bibao.py
T
2026-05-06 11:21:42 +08:00

91 lines
2.2 KiB
Python

# 详细说明闭包的概念、工作原理、使用场景、优势以及在实际开发中的应用价值
# 1. 闭包概述
# 闭包(Closure)是Python中的一种独特的函数机制。简而言之,闭包是指在一个内部函数中,引用了外部函数的变量,而这个外部函数已经执行完毕并返回了内部函数,然而内部函数仍然可以访问这些外部函数中的变量。
# 核心特点
# 内部函数:闭包涉及内部函数和外部函数
# 变量引用:内部函数引用外部函数的变量
# 状态保持:外部函数执行完毕后,内部函数仍能访问外部变量
# 数据封装:通过闭包可以实现数据的封装和隐藏
def out_function(x):
def inner_function(y):
return x + y
return inner_function
func = out_function(1)
result = func(4)
print(result)
# 闭包和作用域链
# 闭包依赖于 Python 的词法作用域规则:内部函数会自动捕获其外部作用域内用到的变量,这些变量在外部函数生命周期结束后也不会被销毁。
# 2.2.3 使用 nonlocal 修改闭包变量
# 通常,闭包内部只能“读取”外部变量。如果想在内部函数中“修改”外部函数的变量,需要使用 nonlocal 关键字。例如:
def make_accumulator(base=0):
total = base
def add(num):
nonlocal total
total += num
return total
return add
acc = make_accumulator(10)
print(acc(20))
print(acc(-1))
# 简单的装饰器
def my_decorator(func):
def wrapper(*args, **kwargs):
print(f"调用函数:{func.__name__}")
result = func(*args, **kwargs)
print(f"函数 {func.__name__} 执行完成")
return result
return wrapper
@my_decorator
def greet(name):
return f"Hello,{name}"
result = greet("小明")
print(result)
# 带参数的装饰器
def repeat(num):
def decorator(func):
def warpper(*args, **kwargs):
results = []
for i in range(num):
result = func(*args, **kwargs)
results.append(result)
return results
return warpper
return decorator
@repeat(3)
def say_hello(name):
return f"Hello {name}"
results = say_hello("小明")
print(results)