闭包的简单使用

1、闭包的形成:

1、函数嵌套

2、内部函数使用外部函数的变量或参数

3、外部函数返回了内部函数

使用外部函数变量的内部函数称为闭包

2、闭包的作用

闭包可以保存外部函数内的变量,不会随着外部函数调用完而销毁。

注意点:

由于闭包引用了外部函数的变量,则外部函数的变量没有及时释放,消耗内存。

类似创建了一个全局变量,只有在整个python文件执行结束之后内存才会释放(仅个人理解,有误后续修正)

3、示例

示例1

def func_out(num1: int):
    a = 10
    # 1、函数嵌套
    def func_inner(num2: int) -> None:
        # 2、使用外部函数的参数或变量
        result = num1 + a + num2
        print('结果是:{}'.format(result))
        return result
    # 3、返回内部函数
    return func_inner


# 创建闭包对象
new_func = func_out(2)
new_func(10)

示例2

def config_name(name: str):
    def func_inner(msg: str) -> None:
        msg = '{}:{}'.format(name, msg)
        print(msg)

    return func_inner


xx1 = config_name('xx1')
xx1('你到北京了嘛?')
xx2 = config_name('xx2')
xx2('我到了!')

示例3:使用关键字nolocal修改外部变量

def func_out():
    num1 = 10

    def func_inner() -> None:
        nonlocal num1  # 注意不是global
        num1 = 20
        result = num1 + 10
        print(result)

    print('修改前的外部变量:num1={}'.format(num1))
    func_inner()
    print('修改后的外部变量:num1={}'.format(num1))
    return func_inner


new_func = func_out()
new_func()
posted @ 2021-07-25 11:59  NFTO  阅读(236)  评论(0编辑  收藏  举报