python闭包和装饰器

一.闭包

1.python闭包
闭包是有外函数和内函数组成的函数
2.创建闭包的三个条件
a.要有函数的嵌套(外部函数,内部函数)
b.内部函数要使用外部函数的变量
c.外部函数必须有返回值,返回内部函数名
3.闭包的简单使用

代码

def out(a):             #外部函数
   def sum( b):          #内部函数
      print('this is sum')
      return a + b
   return sum
fun=out(100)
print(type(fun))
print(fun(20))

输出结果

<class 'function'>
this is sum
120

上面程序中,out是外部函数,sum是内部函数,赋值后fun只是一个函数名,相当于内部函数名sum。若想在内部函数中修改外部函数的变量a,可以使用nonlocal语句指定上级函数的变量a。

二.装饰器

装饰器跟闭包作用差不多,可以在不修改函数源码的基础上增加一些新的功能。
1.装饰器的简单使用
代码

def fun1(fun2):   
   def a():
      print('this is a')
      fun2()
   return a
@fun1
def fun3():  #此处的作用相当于fun3=fun1(fun2)
   print('this is function3')
fun3()

结果

this is a
this is function3

装饰器的作用相当于执行了fun3=fun1(fun3),而fun1(fun3)的返回值是a,所以相当于赋值fun3=a,执行fun3就是执行a。
2.带参数的装饰器
代码

def fun1(fun2):
   def a(b,c):
      print('this is a')
      fun2(b,c)
   return a
@fun1
def sum(a,b):
   print(a+b)
sum(100,200)

结果

this is a
300

3.通用装饰器

def fun1(fun2):
   def a(*args,**kwargs):
      print('this is a')
      fun2(*args,**kwargs)
   return a
@fun1
def sum(a,b):
   print(a+b)
sum(100,200)

该代码的执行结果与上面的执行结果一样,但不同的是该装饰器可以装饰参数数量任意的函数

原本sum函数的执行可以输出数值300,加了装饰器后多输出了一行’this is a’,所以装饰器可以在不修改源码的基础上给函数增加一定的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值