闭包函数

一、闭包函数

闭包:被函数包裹的函数,定义在函数内部的函数

def func():
    name = 'eva'
    def inner():
        print(name)
 函数的嵌套定义闭包函数
定义 在一个函数体内定义另一个函数 外部函数返回内部函数的引用,同时内部函数引用了外部函数的局部变量
作用域 嵌套函数可以访问其外部函数的局部变量和全局变量 闭包可以记住并访问其创建时的环境,包括外部函数的局部变量
用途 组织代码和限制变量的作用域,增强代码的可读性和可维护性 实现回调函数、数据封装和私有变量等
关键点 嵌套函数本身不形成闭包,除非它被返回或作为值传递,并且引用了外部函数的局部变量 闭包特指返回了引用外部变量的嵌套函数的情况

综上所述,闭包函数是函数的嵌套定义的一种特殊形式,它要求外部函数返回内部函数的引用,并且这个内部函数需要引用外部函数的局部变量。这种特性使得闭包函数在数据封装、私有变量保护和回调函数等方面有着广泛的应用。

二、闭包函数的应用场景和意义

2.1 应用场景

# 闭包中使用的变量可以被外层函数所传递,外层函数可以为闭包函数传递参数

def outter(num):
    def inner():
        print(num)     # 10
    inner()  
def t():
    count = 10
    outter(count)
t()

2.2 闭包函数的意义

由于有了作用域的关系,我们就不能拿到函数内部的变量和函数了。

我们都知道函数内的变量我们要想在函数外部用,可以直接返回这个变量,那么如果我们想在函数外部调用函数内部的函数呢?

是不是直接就把这个函数的名字返回就好了?

这才是闭包函数最常用的用法

def func():
    name = 'eva'
    def inner():
        print(name)
    return inner

f = func()
f()

三、判断是否是闭包函数

#输出的__closure__有cell元素 :是闭包函数
def func():
    name = 'eva'
    def inner():
        print(name)
    print(inner.__closure__)
    return inner

f = func()
f()

#输出的__closure__为None :不是闭包函数
name = 'egon'
def func2():
    def inner():
        print(name)
    print(inner.__closure__)
    return inner

f2 = func2()
f2()

 

posted on 2020-05-15 23:16  软饭攻城狮  阅读(112)  评论(0编辑  收藏  举报

导航