千字长文讲解python闭包

1.闭包的作用
a.闭包可以保存函数内的变量,不会随着函数调用完而销毁
2.闭包的定义
a.在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包
3.闭包示例

# 函数嵌套
def outer_func(num1):
    def inner_func(num2):
        # 内部函数使用了外部函数的变量或外部函数的参数
        num = num1 + num2
        print(f'num1: {num1}, num2: {num2}, num: {num}')
    # 外部函数返回了内部函数
    return inner_func


f = outer_func(10)

f(1)
f(2)

'''
num1: 10, num2: 1, num: 11
num1: 10, num2: 2, num: 12
'''

4.闭包和类相似,内部函数使用的外部函数的变量类似于类的属性
5.nonlocal可以在闭包内修改外部变量
a.不使用nonlocal

def outer_func(num1):
    def inner_func(num2):
        num1 = num2 + 10
        print(f'num1: {num1}')
    return inner_func


f = outer_func(10)
f(1)
f(2)

'''
num1: 11
num1: 12
'''

b.使用nonlocal

def outer_func(num1):
    def inner_func(num2):
        nonlocal num1
        num1 = num2 + 10
        print(f'num1 in inner func: {num1}')

    print(f'num1 in outer func before: {num1}')
    inner_func(1)
    print(f'num1 in outer func after: {num1}')

    return inner_func


f = outer_func(10)
f(1)
f(2)

'''
num1 in outer func before: 10
num1 in inner func: 11
num1 in outer func after: 11
num1 in inner func: 11
num1 in inner func: 12
'''

c.nonlocal实现Counter

# 定义一个函数,用于生成一个计数器
def counter():
    # 定义一个外层函数的局部变量,用于存储计数值,初始为0
    count = 0

    # 定义一个嵌套函数,用于返回并修改计数值
    def next():
        # 使用nonlocal关键字声明要修改的外层函数的局部变量
        nonlocal count
        # 将计数值加1
        count += 1
        # 返回计数值
        return count

    # 返回嵌套函数
    return next


c = counter()
print(c())
print(c())
print(c())

'''
1
2
3
'''

你可能感兴趣的:(#,python基础编程,python,开发语言)