zoukankan      html  css  js  c++  java
  • Python 函数装饰器

    作用

    在不修改原函数定义的前提下,动态地增加函数的功能。

    实现方式

    通过定义一个高阶函数,接受被装饰的函数作为参数,返回一个包装函数。

    例子

    一个打印helloworld的函数,我们需要在函数执行前打印函数名。

    def log(func):
        def wrapper(*args,**kw):
            print('call %s():'%func.__name__)
            return func(*args,**kw)
        return wrapper
    
    @log # 等同于 msg=log(msg)
    def msg():
        print('hello, world')
    

    当给msg加上log的装饰器后,msg实际上已经是wrapper函数了。(print(msg.__name__)结果为wrapper)但有时我们需要原函数名,所以我们可以给wrapper加上functools模块里面的wraps装饰器。

    import functools
    def log(func):
        @functools.wraps(func)
        def wrapper(*args,**kw):
            print('call %s():'%func.__name__)
            return func(*args,**kw)
        return wrapper
    
    @log # 等同于 msg=log(msg)
    def msg():
        print('hello, world')
    

    当然我们也可以自己实现wraps装饰器

    def wraps(func1):
        def decorator(func2):
            def wrapper(*args,**kw):
                return func2(*args,**kw)
            wrapper.__name__=func1.__name__
            return wrapper
        return decorator
    
  • 相关阅读:
    selenium 18种元素定位方法
    python3+selenium配置可能报错记录
    adb+monkey压力测试入门
    appscan使用教程(全)
    appium---android元素定位
    QTP自动化测试
    postman Could not get any response。
    Jmeter接口测试+压力测试
    Android 偏门xml属性
    CrashHandler
  • 原文地址:https://www.cnblogs.com/cknightx/p/7602001.html
Copyright © 2011-2022 走看看