ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

7.1 学习日记

2021-07-01 20:35:34  阅读:181  来源: 互联网

标签:return 装饰 学习 7.1 finc 内存地址 日记 原函数 加载


今日内容

装饰器是一个用来被装饰者添加功能的工具

被装饰者:函数

装饰器:可以用函数事先装饰器这种工具

无参装饰器
无参装饰器模板
from functools import wraps
def otter():
#finc原函数的地址这里是(lndex)
   @wraps(finc)
   #把内置属性覆盖给装饰器,装的更像
def wrapper(*args,**kwargs):
       #将原函数需要的值一模一样的还给他
       res = finc(*args,**kwargs)
       #将原函数的返回值赋值给res
  return res
       #返回原函数的返回值
       
   return wrapper
   #返回wrapper的内存地址,

   
@otter   #函数语法糖(要调用装饰器,要把装饰器写在上面)
def index(x): #原函数
    print(x)
    return 4546
装饰器语法糖
@后面跟一个函数的内存地址,python会自动触发这个函数的运行,将正下方的那个函数的内存地址当作参数传进来,将返回值返回给原函数名

from functools import wraps
@wraps:把内置属性覆盖给装饰器(加在装饰器里)
叠加多个装饰器:加载顺序与执行顺序
@deco1   #打印111
@deco2   #打印222
@deco3   #打印333
def index(x): #原函数
    print(x)
    return 4546


结果是
111
222
333

加载顺序是从下往上
执行顺序是从上往下


加载顺序:先加载最下面的装饰器,把原函数的内存地址加载到func3,返回wrapper3的地址。
再加载deco2,把wrapper3的内存地址加载到func2,定义wrapper2,返回wrapper2的地址。
再加载deco1,把wrapper2的内存地址加载到func1,定义wrapper1,返回wrapper1的地址。
把wrapper1的内存地址返回给了原函数(index)


执行顺序:调用index就是调用wrapper1,运行wrapper1,再运行wrapper2,再运行wrapper3,最后运行原函数(index)
有参函数装饰器
如果最内侧的函数还需要输入一个值,但是已经没办法改原代码了,那就再装饰的最外层加上,但是这样语法糖就没有办法使用了。

语法糖怎么使用呢?在普通语法糖的后面加上括号输入最外层函数需要的值。

无参装饰器模板
from functools import wraps

def outter(x,y):
#finc原函数的地址这里是(lndex)
   @wraps(finc)
   #把内置属性覆盖给装饰器,装的更像
def wrapper(*args,**kwargs):
       #将原函数需要的值一模一样的还给他
       res = finc(*args,**kwargs)
       #将原函数的返回值赋值给res
  return res
       #返回原函数的返回值
       
   return wrapper
   #返回wrapper的内存地址,

   
@outter(111,222)  
def index(x,y): #原函数
    print(x,y)
    return 4546

 

标签:return,装饰,学习,7.1,finc,内存地址,日记,原函数,加载
来源: https://www.cnblogs.com/hao613/p/14960602.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有