Python函数闭包

本文深入解析了Python中闭包的概念,通过实例说明如何在内部函数中引用外部作用域的变量,以及闭包的构成要素。同时,介绍了装饰器的使用,展示如何在不修改原有函数的基础上增加新的功能,如计时器装饰器的应用。

 定义:如果在一个内部函数里,对外部作用域(单不是在全局作用域)的变量进行引用。

def outer():
    x=10
    def inner():#条件一:内部函数
        print(x)#条件二:对外部环境变量的一个引用
    return inner  #结论:内部函数就是一个闭包

#outer()()
#f=outer()
#f()
#inner()#局部变量,全局无法调用

f=outer()
f()


关于闭包:闭包=内部函数块 + 定义函数时的环境

下面的例子没有定义函数的环境,所以不是闭包

def outer1():
    x=10
    def inner():
        c=100
        print(c)
    return inner 
f=outer1()
f()

 

闭包作用:在不修改原有的功能基础上增加功能

import time
def foo():
    print('foo...')
def bar():
    print('bar...........')



def show_time(f):
    def inner():
        start = time.time()
        f()
        end = time.time()
        print('spend %s'%(end-start))
    return inner


foo=show_time(foo)
foo()
bar=show_time(bar)
bar()

原函数只实现了打印,但是我后面需要增加打印耗费时间,因此放在inner函数下面

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件测试老痞

你的支持,是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值