专栏首页python-爬虫函数的装饰器,两层装饰器和三层装饰器

函数的装饰器,两层装饰器和三层装饰器

06.01自我总结

一.装饰器

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()
#他是对于输入的值的一层装饰,判断他是拿来的

`

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • hook框架frida的安装以及简单实用案例

    This is the recommended way to get started. All you need to do is:

    小小咸鱼YwY
  • js键盘事件以及键盘事件拦截

    小小咸鱼YwY
  • python 面向对象编程 - 小游戏

    小小咸鱼YwY
  • 史上最强Atari游戏通关算法:蒙特祖玛获分超过200万!

    在强化学习中,解决经典Atari游戏《蒙特祖玛的复仇》和《Pitfall》一直是个巨大的挑战。

    新智元
  • shell定时执行

    删除test1.sh的任务 sed -i '/test1.sh/d' /var/spool/cron/root 删除文件中含有test1.sh的行

    用户1171305
  • 360搜索面试总结

    今天面试360搜索通过了,谢谢牛客网的内推,在这里把面试中问到的问题总结出来。我是个菜鸟,希望能给别人一些帮助。

    牛客网
  • SaaS 厂商关注 CAC&LTV,不如关注产品提高

    本文编译:杨丽 编译自某外文网站 客户终身价值(LTV)=平均客户净利润÷流失 如果客户终身价值指数很高,却出现了负流失值,那么这个公式就显得不那么合适了,...

    人称T客
  • 【每日一课】第3课:Excel表格的输入和编辑

    PPV课大数据 课程名称 Excel 2007/2010表格基础入门和常用函数视频教程(共40课) 第3课:Excel表格的输入和编辑 课程目的 能基本掌握ex...

    小莹莹
  • 【python】os 模块使用笔记

    Python内置的os模块可以调用操作系统提供的接口函数,对文件或目录进行操作(实际上操作系统是不允许应用程序直接访问和操作文件和目录的,读写文件就是请求操作系...

    zenRRan
  • 围棋之幸?围棋之悲?史上最年轻“五冠王”柯洁宣布再战AI

    人们谈论说,人还是那个人,狗不再是那只狗—— 但这次,狗不再是那只狗,人也不是那个人了。 昨天下午,论智从中新网了解到,刚刚斩获人生第五冠的棋手柯洁在中国棋院宣...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券