编程语言
首页 > 编程语言> > python中闭包的应用场景和使用闭包的原因

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()
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

标签:闭包,return,python,中闭,add,print,hello,def
来源: https://blog.csdn.net/weixin_42289273/article/details/120115930