函数的闭包

本文详细探讨了Python中的函数闭包,从内部函数的特点出发,重点解析了闭包的定义,展示了闭包在计时器等场景的应用,并对闭包的使用进行了总结,旨在帮助读者深入理解这一核心概念。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文主要介绍函数的闭包


提示:以下是本篇文章正文内容,下面案例可供参考

一、内部函数

在这里插入图片描述

#内部函数
‘’’
特点:
1.可以访问外部的函数的变量
2.内部函数可以修改外部函数的可变类型的变量例如:list1
3.内部函数修改全局的不可变变量时,需要在内部函数声明global 变量名
内部函数修改外部函数的不可变的变量时,需要在声明 nolocal 变量名
4.locals() 查看本地变量有哪些,以字典的形式输出
globals() 查看全局变量有哪些,以子弟的形式输出(注意里面会有系统的一些键值对)

‘’’

def func():
    #声明变量
    n=100 #局部变量
    list1=[1,2,3,4] #局部变量

    #声明内部函数
    def inner_func():
        #对 list里面的元素进行加5操作
        nonlocal n
        for index,i in enumerate(list1):
            # 0 3
            list1[index]=i+n
        list1.sort()
        #修改n
        n +=101

    #调用一下内部的函数
    inner_func()
    print(n)
    print(list1)

#调用func
func()

案例2

a=100 #全局变量
print(globals())
def func():
    global a
    #声明变量
    b=99
    #声明函数
    def inner_func():
        nonlocal  b
        global a
        c=88
        #尝试修改
        c+=12
        b+=1
        a+=10
        #尝试打印
        print(a,b,c)
    #调用内部函数
    inner_func()
    #使用locals()内置函数进行查看,可以看到在当前函数中声明的内容有哪些
    #local()是一个字段,key,value
    print(locals())


func()

二、函数的闭包

1.闭包的定义

#闭包
# 在函数中提出的概念:
'''
条件:
1 .外部函数中定义了内部函数
2. 外部函数时有返回值
3. 返回值是,内部函数名
4.内部函数引用了外部函数的变量
格式:
def 外部函数():
    pass
    def 内部函数()
        pass
    return 内部函数

'''
def func():
    a=100
    def inner_func():
        b=99
        print(a,b)
    print(locals())
    return inner_func


x=func()

x()


#print(a) 报错

2.闭包的应用

#闭包
'''
1.能够保存返回返回闭包时的状态
'''
def func(a,b):
    c=10
    def inner_func():
        s=a+b+c
        print('相加之和的结果是:',s)
    return inner_func

#调用func
ifunc=func(6,9) #ifunc 就是inner_func
#调用返回处理的内部函数
ifunc1=func(2,8)
ifunc2=func(9,10)
print(ifunc)
print(ifunc1)
print(ifunc2)

ifunc1()
ifunc()
ifunc2()



在这里插入图片描述

2 闭包的应用计时器

#闭包的应用
#计数器
def generate_count():
    container=[0]
    def add_one():
        container[0]= container[0]+1
        print('当前是第{}次访问'.format(container[0]))
    return add_one


#内部函数就是一个计数器
counter =generate_count()

counter()  #第一次的访问
counter() #.....

3 闭包的总结

在这里插入图片描述

'''
闭包有什么缺点呢?
闭包的缺点1,作用域没有那么直观
回包的缺点2:因为变量不会被立即回收所以有一定内存占用问题

闭包作用: 1.可以使用同级作用域
         2,读取其他元素的内部变量
         3.延长作用域
闭包总结
1.闭包优化了变量,原来需要类对象完成的工作,闭包也可以完成
2.由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放
3.闭包的喊出,时代吗变得简洁,便于阅读代码
4.闭包是理解装饰器的基础
'''

def func():
    a=100

    def inner_func1():
        b=90
        s=a+b
        print(s)

    def inner_func2(): #define
        inner_func1() #调用func1

        print('--------inner_func2')
        return 'Hello World'

    return  inner_func2()


#调用func
f= func()
print(f)
ff=f()
#inner_func()


总结

提示:主要介绍闭包和内置函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值