python装饰器菜鸟教程,python中装饰器的定义

  python装饰器菜鸟教程,python中装饰器的定义

  本文主要介绍python decorator的代码分析。文章分享的内容包括decorator的一般模型和一些要点。通过实例的详细介绍,有参考价值,有需要的朋友可以参考一下。

  00-1010 1.装饰者的一般模型2。多个装饰器的函数执行3。带参数的装饰者4。班级装饰者

  

目录

  定义包装(fn):

  def inner(*args,**kwargs):

  ret=fn(*args,**kwargs)

  返回ret

  返回内部

  装饰器几个关键点:

  1.函数可以作为参数传递。2.函数可以作为返回值返回。3.函数名可以被赋值为变量。装饰器本质上是闭包,在不改变原来的函数调用的情况下,给函数添加新的函数。

  举个例子:

  国防行政(游戏):

  Def inner (* args,* * kwargs) : # inner添加了参数,args必须是元组kwargs必须是字典

  打印(“开放工作组”)

  Result=game (* args,* * kwargs) # * *表示args元组和kwargs分散成位置参数,传入关键字参数。

  打印(“关闭工作组”)

  回送结果

  返回内部

  @admin

  def play_dnf(用户名,密码):

  打印(f 开始玩DNF,账号: {用户名},密码3360 {密码} )

  印刷(“刀割肉,心割魂”)

  还‘掉:元的哭炮’

  @admin

  def play_wow(种族,职业,服务器_名称,阵营):

  打印(f 开始玩魔兽世界,种族:{race},职业3360 {occupation},服务器3360 {server _ name},营地3360 {camp} )

  印刷品(“为了辛多雷的荣耀”)

  返回掉了:的灰烬使者

  if __name__==__main__:

  Ret1=play_dnf(大马猴, 88888 )

  打印(返回1)

  Ret2=play_wow(血精灵,圣骑士,回声山,部落)

  打印(返回2)

  这段代码很容易理解,所以我就不解释了,然后是执行结果如下:.

  python demo.py

  开放工作组

  开始玩DNF,账号:密码:88888。

  刀割肉,心割魂。

  关闭工作组

  滴:屠杀法哼哼唧唧的枪。

  开放工作组

  开始玩魔兽世界,种族:血精灵,职业:圣骑士,服务器:回声山,营地:部落。

  为了辛多雷的荣耀

  关闭工作组

  掉落:灰烬使者

  进程结束,退出代码为0

  

1.装饰器通用模型

  一个函数被多个装饰器装饰,又将如何执行呢?

  定义包装器1(fn):

  def inner(*args,**kwargs):

  打印(“这是w1条目”)

  ret=fn(*args,**kwargs)

  打印(“这是w1输出”)

  返回ret

  返回内部

  定义包装器2(fn):

  def inner(*args,**kwargs):

  打印(“这是w2条目”)

  ret=fn(*args,**kwargs)

  打印(“这是w2输出”)

  返回ret

  返回内部

  @wrapper1

  @wrapper2

  定义目标():

  打印(“我是目标”)

  if __name__==__main__:

  目标()

  直接给出执行顺序:

  由多个装饰者装饰的函数的执行顺序。

  # w1 w2目标w2 w1

  

2.多个装饰器装饰的函数执行

  装饰器的语法允许我们在调用时提供其他参数,比如@decorator(a)。这样就为decorators的编写和使用提供了更多的灵活性。

  (上面设置了另一层功能)

  例如,我们可以在装饰器中指定日志级别,因为不同的业务功能可能需要不同的日志级别。

  定义使用记录(级别):

  定义装饰器(功能):

  def包装(*args,**kwargs):

  如果level==warn:

  logging.warn(%s正在运行 % func。__name__)

  elif级别==info:

  logging.info(%s正在运行 % func。__name__)

  返回函数(*参数)

  返回包装

  返回装饰者

  @use_logging(level=warn )

  def foo(name=foo):

  打印(“我是% s“% name”)

  foo()

  

3.带参数的装饰器

  没错,decorator不仅可以是函数,也可以是类。与函数装饰器相比,类装饰器具有很大的灵活性、高内聚性和封装性。使用类装饰器主要依赖于类的__call__方法,当装饰器使用@ form附加到一个函数时调用该方法。

  类Foo(对象):

  def __init__(self,func):

  自我。_func=func

  def __call__(self):

  打印(“类装饰器运行”)

  自我。_func()

  打印(“类装饰结束”)

  @Foo

  定义栏():

  打印(“条形”)

  酒吧()

  这就是关于python装饰器代码分析的这篇文章。关于python decorator的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望你以后能支持风行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: