当前位置:首页 » 《随便一记》 » 正文

自动化快速上手--Python(12)--装饰器_清欢无别事

25 人参与  2022年05月17日 11:43  分类 : 《随便一记》  评论

点击全文阅读


        这里是清安,欢迎查阅本章,本章较为重要,后面的过程中,你会随处可见哦,特别是pytest中。以及unittest还有你可以自己写!!!

        何为装饰器?

        装饰器就是给某一个函数或某一个程序,再不改变它原程序的基础上添加其他的功能,比如家里有一口井,你想喝水,就需要一个工具来打水,这个工具可以称之为装饰。或者你可以更直白的理解为,你想把自己打扮的更花枝招展的,就需要很多的东西来装饰。

        装饰器定义:

def log(func):
    def wrapper(*args,**kwargs):
        print("f{func.__name__}")
        return func(*args,**kwargs)
    return wrapper

        我们先看一个普通函数:

def log(func):
    # warning是警告,可以忽略
    # {func.__name__}获取函数名
    logging.warning(f'{(func.__name__)}函数正在执行')
    # func()

def fun1():
    print('这里是清安')

log(fun1)
# 这里的结果是:
# WARNING:root:fun1函数正在执行

    清安这里是搭配logging来写的,下一章就会讲到logging。装饰器里面你可以写任何你想要的功能,实现加减乘除,循环列表等功能,小北这里走自动化测试的,所以就把logging放在这里举例了。问:为什么没有打印这里是清安?

答:因为我没有调用对应的函数。上面注释了。
写入装饰器

def log(func):
    def wrapper():
        logging.warning(f'{func.__name__}函数运行中')
        return func

    return wrapper()

def fun1():
    print('清安')

@log
def fun2():
    print('这里是清安')
# 其结果是:
# WARNING:root:fun2函数运行中

        清安在fun2函数方法出引用了装饰器,fun1没有引用,这样就不需要再写调用函数也能跑起来并且看到控制台信息了。这里是添加了一个提示信息。

        当你想要把装饰器引用到fun1()时。

fun_1 = log(fun1)

# WARNING:root:fun2函数运行中
# WARNING:root:fun1函数运行中

装饰器传参:

import logging

def log(func):
    def wrapper(*args, **kwargs):
        logging.warning(f'{func.__name__}函数运行中')
        # print('args',args)
        # print('kwargs',kwargs)
        return func(*args, **kwargs)

    return wrapper

@log
def qing():
    print('清安')

@log
def qingan(age, name):
    print(f"我叫{name},今年{age}岁")

@log
def anan(age):
    print(f"今年{age}岁")

qing()
anan(age=21)  # 指定传值用到**kwargs
qingan(21, '清安')  # 位置传值用到*args
清安
今年21岁
我叫清安,今年21岁
WARNING:root:qing函数运行中
WARNING:root:anan函数运行中
WARNING:root:qingan函数运行中

    装饰器传参与函数传值类似,也有位置传参与指定值传参。注释处可以看到传参具体信息,让你清除的看到对应从传值信息,这里小北可以告诉你,这里的传值是字典传值,与元组传值。
 


点击全文阅读


本文链接:http://zhangshiyu.com/post/40292.html

函数  装饰  运行  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1