怎么用visual studio做网站,程伟网络营销,开封景区网站建设方案,wordpress做排行榜单装饰器 装饰器一. 简单的装饰器二. 带参数的装饰器 装饰器
类似于java的切面#xff0c; 再不更改原函数代码的前提下#xff0c;动态做一些动作。
一. 简单的装饰器
def logging(func):def wrapper(*args, **kwargs):print(logging is running,filesys.stder… 装饰器 装饰器一. 简单的装饰器二. 带参数的装饰器 装饰器
类似于java的切面 再不更改原函数代码的前提下动态做一些动作。
一. 简单的装饰器
def logging(func):def wrapper(*args, **kwargs):print(logging is running,filesys.stderr)func(*args, **kwargs)return wrapperdef bar():print(i am bar)bar logging(bar)# 返回wrapper函数
bar() # 调用返回的wrapper内部会执行bar()上面其实就是装饰器的本质 为了隐藏 b logging(bar) b() 这种丑陋的写法我们可以写成如下的样子
def logging(func):def wrapper(*args, **kwargs):print(logging is running,filesys.stderr)func(*args, **kwargs)return wrapperlogging
def bar():print(i am bar)
bar() 二. 带参数的装饰器
传统写法
import sysdef use_logging(level):def decorator(func):def wrapper(*args):if level warn:print(logging is running,filesys.stderr)else:print(logging is running,filesys.stdout)func(*args)return wrapperreturn decorator# use_logging(levelwarn)
def foo(name):print(i am %s % name)d use_logging(warn)
f d(foo)
f(董梦雨)装饰器高级写法
import sysdef logging(level):def decorator(func):def wrapper(*args):if level warn:print(logging is running,filesys.stderr)else:print(logging is running,filesys.stdout)func(*args)return wrapperreturn decoratorlogging(levelwarn)
def foo(name):print(i am %s % name)foo(董梦雨)