python闭包、装饰器

概念:在一个函数内部再定义一个函数,定义的函数引用外部函数的变量,那么这个定义的函数和变量就叫闭包。

#如果要修改变量,先用nonlocal申明

例子:类定义

class lnfun(object):

       def __init__(self,k,b):

              self.k=k

             self.b=b

       def cal(self,x):

             print(self.k*x+self.b)                 #较麻烦

例子:装饰器 

       def    outer(k,b):

              def  inner(x):

                     print(kx+b)                        

                       return inner         #使用闭包的优点是代码精简

调用:

a=outer(1,2)

a(5)

装饰器:

概念:在不修改函数功能的基础上,扩展功能

单层装饰器:

def outer(fun):

      def inner():

           print('你真皮')

            fun()

      return inner

@outer      #base_fun=outer(base_fun)

def base_fun():

          print('瞅你咋地')


base_fun()        #相当于加了一层装饰

多层装饰器:

def out1(fun):

        print('快点吃饭啊')

        def in1():

            print('那就别吃了')

            fun()

        return in1

def out2(fun):

        print('不吃饭打你屁屁')

        def in2():

               print('吃什么好呢')

        return in2

@out1  # eat=out1(eat)

@out2  # eat=out2(eat)

def eat():

print('没有食欲')

eat()

“”“调用顺序:装饰器装饰遵循最近原则,理解引用,引用的是in指向的代码块。“”“

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 闭包 闭包实现函数嵌套外函数里包装一个内函数外函数作用域有一个局部数据对象内部函数对于外部函数作用域里非全局变量的...
    心水Diana阅读 1,481评论 0 0
  • 1. 闭包 在函数内部再定义一个函数,并且内部函数用到了外部函数作用域里的变量(enclosing),那么将这个内...
    C_Z_Q_阅读 1,423评论 0 4
  • 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返...
    胡一巴阅读 3,177评论 0 0
  • 闭包 内部函数调用外部函数的变量(一个闭包就是你调用的一个函数A,这个函数A返回一个函数B给你。这个返回的函数B就...
    等哈光圈阅读 1,630评论 0 0
  • ### 装饰器定义 **在不改变原有函数代码,且保持原函数调用方法不变的情况下,给原函数增加新的功能(或者给类增加...
    lmonkey_01阅读 1,702评论 0 0

友情链接更多精彩内容