标签:自动化测试 ram 自动化测试框架 ima ret width 调用 size fun
import os def decor(func): def with_decor(*args, **kwargs): #这里内部嵌套函数使原函数参数能顺利传递 func(*args, **kwargs) #func_A 会在这里被调用 a = args print(a) print(‘call decor‘) return with_decor @decor def func_A(*args, **kwargs): print(‘call A‘) func_A(1,2,3) os.system("pause")
该程序将会输出:
调用 func_A 函数会执行直接装饰器里的内容,并将参数传入闭包
python装饰器会使原函数的属性被改变,比如func.__name__
这里添加一行 print(func_A.__name__) 来展示影响
输出效果:
可以看到原函数 func_A 的名字变成了装饰器里面的函数 with_decor 的名字
这导致一些特殊场合要用到这些属性时不方便,比如在 Robot Framework 自动化测试框架中调用函数,函数被装饰后就不能被正常调用
import os from functools import wraps def decor(func): @wraps(func) def with_decor(*args, **kwargs): return func(*args, **kwargs) return with_decor @decor def func_A(*args, **kwargs): print(‘call A‘) func_A(1,2,3) print(func_A.__name__) os.system("pause")
输出: 可以看到原函数的属性没有被改变
wraps 的作用可以理解为消除装饰器的影响
标签:自动化测试 ram 自动化测试框架 ima ret width 调用 size fun
原文地址:https://www.cnblogs.com/Pio-GD/p/14204092.html