1. 当做计算器使用
2. 统计函数的被调用次数
3. 当做装饰器使用
def calculate(): """当做计算器使用""" num = 0 def add(value): nonlocal num # 内嵌作用域需要使用nonlocal关键字 num += value return num return add add1 = calculate() print(add1(5)) print(add1(10)) print(add1(15)) add2 = calculate() print(add2(3)) print(add2(13)) print(add2(16)) print(add1(70)) def counter(func): """统计函数的被调用次数""" count = 0 def closure(*args, **kwargs): nonlocal count count += 1 print(f"{func.__name__}被调用了{count}次了") return func(*args, **kwargs) return closure def add(a, b): print(f"SUM: {a + b}") def say_hello(): print("hello") counter_add = counter(add) say_hello = counter(say_hello) counter_add(11, 22) say_hello() counter_add(33, 22) say_hello() say_hello() say_hello() counter_add(33, 22) def decorator(fn): """当做装饰器使用""" symbol = '$' def closure(*args, **kwargs): return symbol + str(fn(*args, **kwargs)) return closure @decorator def add_symbol(number): return number print(add_symbol(200)) print(add_symbol(3000)) print(add_symbol(80000))
1. 在 Python 中使用闭包的最重要的一点是它们提供某种数据隐藏作为回调函数。这反过来又减少了全局变量的使用。
2. 在某些情况下,使用闭包而不是类可以减少代码大小,节省内存空间。
3. 闭包非常适合替换硬编码常量。
4. 闭包在装饰函数中非常有用。我们在下面的例子中可以看到
参考链接:https://www.codesansar.com/python-programming/closures-applications.htm