zoukankan      html  css  js  c++  java
  • python笔记之装饰器

    python中函数的参数也可以是函数,在多个函数需要实现相同代码时也可以考虑使用装饰器进行处理。

    假设以下场景,需要进行查询及查看个人主页操作,那么在此操作之前一般需要先登录系统,此时就可以将登录函数写成装饰器函数

     1 def login(fun): #装饰器函数格式,函数内层在定义一个函数,同时函数返回内层函数本身,相当于是执行内层函数msg
     2     def msg():
     3         print('登录成功')
     4         fun()
     5     return msg
     6 
     7 @login    #装饰器login
     8 def search1():  #一旦函数被装饰,自动执行装饰器函数login,且该函数相当于装饰器的参数
     9     print('查询成功')
    10 
    11 @login
    12 def profile():
    13     print('欢迎你查看个人主页')

    以上代码,login为装饰器函数,search1、profile为被装饰器函数,详细的解释这个代码的意思:
    1、自动执行login函数并且将被装饰的函数当作login函数的参数来处理
    2、将login函数的返回值msg重新赋值给被装饰的函数
    3、一旦结合了装饰器,调用被装饰的函数本质上是执行msg()函数
    4、函数被装饰之后,被装饰的函数重新赋值给装饰器的内层函数

    下面看一下被装饰函数有参数的情况

     1 def loginxt(fun):
     2     def msg(*args,**kwargs):
     3         r = fun(*args,**kwargs)
     4         if r:
     5             return r
     6     return msg
     7 
     8 @loginxt
     9 def order(name,pwd):
    10     if name=='admin' and pwd=='123456':
    11         return ('欢迎你登录系统')
    12     else:
    13         return ('请先登录系统')
    14 
    15 
    16 print(order('admin','123456'))
  • 相关阅读:
    WEB存储
    2D变形
    HTML5音频与视频
    HTML5 canvas元素
    HTML5表单
    Can't finish GitHub sharing process Successfully created project 'springcloud-parent' on GitHub,
    Intellij idea上传项目到github
    Git for Windows安装和基本设置
    Eclipse注释快捷键、如何生成API以及可能遇到的问题解决
    mysql忘记密码
  • 原文地址:https://www.cnblogs.com/heertong/p/12128236.html
Copyright © 2011-2022 走看看