Python小白教学 | 闭包和装饰器

客官°小女子只卖身不卖艺 2022-02-21 10:22 429阅读 0赞

一、闭包

1、什么是闭包

一个函数A(外函数)在内部定义了函数B(内函数),内函数运用了外函数的临时变量,并且外函数的返回值是内函数的引用

闭包格式示例:

  1. def outer(): #外函数
  2. a="吾是临时变量!" #临时变量
  3. def inner(): #内函数
  4. print("引用外函数的临时变量------>",a) #引用外函数的临时变量
  5. return inner # 外函数的返回值是内函数的引用

2、闭包有什么用

a.闭包就是为了不动原函数里面的代码,还要给它增加‘功能’的一种手段。

b.通过外面的一层层的函数传递的参数,让最内层的函数可以直接调用外层函数所有参数,从而实现不动原函数的代码,增加新功能的办法。

3、为什么要用闭包

在企业中已经上线或被使用的程序不允许大批量的修改源代码,说白了就是修改是封闭的,扩展是开放的。装饰器就是为了给某程序增添功能而生的!这个时候装饰器就显得由为重要。

二、装饰器是闭包最好的体现

1、装饰器是如何实现的

调用函数时发现函数上有语法糖@XXX,执行函数XXX(装饰器)内容,通过XXX(YYY)中的形参YYY传递源函数,再向下执行

2、示例展示装饰器的作用

示例1:
给源函数添加功能:打印中文的“我爱你!“

  1. def Add_Fun(fun): #fun为形参,代表传递进来的源函数
  2. def Say(): #内函数
  3. fun() #运行源函数
  4. print("我爱你!") #添加的功能
  5. fun() #运行源函数
  6. return Say #返回函数对象
  7. @Add_Fun #语法糖
  8. def Test(): #源函数
  9. print('I LOVE U !')
  10. Test() #调用源函数
  11. 运行结果:
  12. I LOVE U !
  13. 我爱你!
  14. I LOVE U !

示例2:
关于接受多个参数和关键字参数——(*args, ** kwargs)

  1. def Add_Fun(fun): #fun为形参,代表传递进来的源函数
  2. def Say(*args,**kwargs): #内函数
  3. print(args)
  4. print(*args)
  5. fun(*args,**kwargs)
  6. return Say
  7. @Add_Fun
  8. def Test(say1,say2,*args,**kwargs):
  9. print(say1)
  10. print(say2)
  11. Test(1,2,'hello') #不会因为参数数量不对报错,并且能接收多个参数
  12. 运行结果:
  13. (1, 2, 'hello') #args接收的数以元组储存
  14. 1 2 hello #*args接收的所有参数
  15. 1
  16. 2

发表评论

表情:
评论列表 (有 0 条评论,429人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Python3 装饰

    一.什么是闭包        不同编程语言实现闭包的方式是不同的,python中闭包从表现形式上看,如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,