python中闭包的应⽤场景⼀、闭包的应⽤场景
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()
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. 闭包在装饰函数中⾮常有⽤。我们在下⾯的例⼦中可以看到
三、匿名函数、函数、闭包和对象的区别?
1. 匿名函数:能够完成基本的简单功能,传递的是这个函数的引⽤,只有功能
2. 函数:普通函数能够完成较为复杂的功能,传递的是这个函数的引⽤,只有功能诗鬼是谁
3. 闭包:闭包能够完成较为复杂的功能,传递的是这个闭包中的函数及数据,因此传递的是功能+数据
4. 对象:能够完成最为复杂的功能,传递的是很多数据+很多功能,因此传递的是功能+数据