尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

【python 装饰器】装饰器-入门

【python 装饰器】装饰器-入门 在讲装饰器前先简短带大家回顾一下闭包的概念。闭包满足以下三个条件闭包函数定义在函数内部使用了外部函数的变量外部函数返回了该内部函数下面这段代码中prompt就是一个闭包函数。# 代码1 def eat(): food 香蕉 def prompt(): print(food) return prompt eat()装饰器装饰器的作用在不修改原函数代码的基础上为原函数增加新功能。执行流程1. 装饰器接收一个函数并存着2. 装饰器返回一个闭包函数3. 闭包函数被调用执行其对应的代码。一个装饰器修饰函数定义一个装饰器用于输出提示信息 def prompt(func): def inner(): print(加法运算) func() return inner prompt def add(a1, b2): print(a b) add()# 输出 加法运算 3上面这段程序执行过程当Python解释器读到prompt装饰器时它会立即执行prompt函数并将add函数作为参数传递给它。prompt函数定义了inner函数并将其作为闭包返回。装饰器prompt的作用完成后add的名字不再指向原始的add函数而是指向了prompt返回的inner函数。最后当代码执行到add()时实际上是在调用inner函数。在inner函数中它会首先打印出加法运算然后调用原始的add函数。多个装饰器修饰函数注意装饰器是靠近函数定义的装饰器开始向上执行即从下往上执行。def action(func): print(action, func) def out1(actions狗刨): func() # 这里调用的是out函数 print(游泳动作: %s % actions) return out1 def eat(func): print(eat, func) def out(food香蕉): func() # 这里调用的是animal函数 print(吃: %s % food) return out action eat def animal(animals猴子): print(animals) animal() # 这里调用的是迭代器action返回的out1()# 输出 eat function animal at 0x000001CBEFFE5800 action function eat.locals.out at 0x000001CBEFFE58A0 猴子 吃: 香蕉 游泳动作: 狗刨程序执行过程因为是从下往上执行所以先执行eat,在执行action。Python执行到eat装饰器时eat装饰器被调用其参数是animal函数。接下来action装饰器被调用其参数是eat装饰器返回的out函数。最终animal函数变替换成out1函数然后在animal()这行开始调用。
返回列表