文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

学习python的第十五天(函数的装饰器

2023-01-31 00:50

关注

一.装饰器

1.函数装饰圈的定义

函数装饰器:一种装饰函数的函数

2.个人理解两层函数装饰器

两层函数装饰器个人觉得他其实就是把需要装饰的函数名丢入形参,然后用一个嵌套的函数对其头尾进行添加程序,但是不能减少他的程序内容,他的原来程序不变只能增不能减少,然后返回装饰好的子函数,再全局定义一个变量名与要装饰的函数名相同名字,并且将装饰后的函数调用赋予改变量.

1.简单的例子(无参函数)

#有个函数f1
def f1():
    print('nick machachong')
#我们要对齐装饰使其输出打印内容上下都加了'-'线
def f1_deco(f1):                         #第一步吧变量丢进去
    def wrapper():
        #print(50*'-')                #我们加的内容
        #print('nick machachong')   #这个等同于f1()
        #print(50*'-')                #我们要加的内容
        #这是我们需要的打印效果
        
        pritn(50*'-')
        f1()
        print(50*'-')
    return wrapper  

f1 = f1_deco(f1)             #前面的f1是变量f1,函数本是f1并未发生变化只是一个变量名接受了f1
f1()

​```
--------------------------------------------------
nick machachong
--------------------------------------------------
​```
#另外种写法
@f1_deco
def f1():
    print('nick machachong')
f1()
​```
--------------------------------------------------
nick machachong
--------------------------------------------------
​```

2.关于有参函数

#如函数
def sum(x,y):
    print(x+y)
#我们要对齐装饰使其输出打印内容上下都加了'-'线
def sum_deco(sum):
    def wrapper(x,y):
        print("-")
        sum(x,y)
     return sum
sum() = sum_deco(sum)
sum(x,y)

#多个值
def sb(x,y,z=2,b=1):
    print(x,y,z,b)
#把他进行封装
def sb_deco(sb):
    def wrapper(*args,**kwargs):
        print('nick machachong')
        sb(*args,**kwargs)
    return wrapper
sb = sb_deco(sb)
sb(1,23,2,3)

3.对于有返回值的函数式

#有返回值
def sb(x,y,z=2,b=1):
    return x,y,z,b
#对于返回值乘以3
def sb_deco(sb):
    def wrapper(*args,**kwargs):
        res = sb(*args,**kwargs)
        res = list(res)
        for a in range(len(res)):
            res[a] = 3*res[a]
        res = tuple(res)
        return res
    return wrapper
sb = sb_deco(sb)
print(sb(2,3,4,5))

4.装饰圈模板

def sb(*args,**kwargs):
    pass
#装饰器模板
def sb_deco(sb):
    def wrapper(*args,**kwargs):
        #sb(*args,**kwargs)   
        res = sb(*args,**kwargs)  #赋值的时候已经开始调用了所有没必要在写一步调用
        return res
    return wrapper
sb = sb_deco(sb)
sb(1,23,2,3,12,312,312,3,123)

3.对于三层装饰器理解

#比如说一个函数为,我们对齐装饰,打印内容前后上下加'-'
def sb():
    print('i am sb')
    
#装饰
def sb_deco(sb):
    def wrapper():
        print('-'*5)
        sb()
        print('-'*5)
    return wrapper
#只时候我们加条件要区分是你输入还是我输入的

# 只时候我们加条件要区分是你输入还是我输入的, 我那边聪明肯定不是SB
def sb_deco(sb):
    def wrapper():
        if user == 'you':
            print('-' * 5)
            sb()
            print('-' * 5)
        elif user == 'i':
            print('-' * 5)
            sb()
            print('这是不可能的')
            print('-' * 5)
    return wrapper
#这时候我们导入的参数多了个user
def user(user):
    def sb_deco(sb):
        def wrapper():
            if user == 'you':
                print('-' * 5)
                sb()
                print('-' * 5)
            elif user == 'i':
                print('-' * 5)
                sb()
                print('这是不可能的')
                print('-' * 5)
        return wrapper
    return sb_deco


@user('you')                  #其中@user('you') 相当于a =user('you') sb = a(sb)  
def sb():                                                                           
    print('i am sb')
sb()
#他是对于输入的值的一层装饰,判断他是拿来的

`

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯