详解Python装饰器

yipeiwu_com6年前Python基础

1. 定义

本质是函数,用来装饰其他函数,为其他函数添加附加功能

2. 原则

a. 不能修改被装饰函数的源代码
b. 不能修改被装饰的函数的调用方式

3. 实现装饰器知识储备

a. 函数就是变量
b. 高阶函数
    i. 把一个函数当作实参传给另外一个函数,在不修改被装饰函数源代码情况下为其添加功能
    ii. 返回值中包含函数名, 不修改函数的调用方式
c. 嵌套函数
 高阶函数+嵌套函数==》装饰器

# Author: Lockegogo

user, passwd = 'LK', '130914'
def auth(auth_type):
 print('auth func:', auth_type)
 def outher_wrapper(func):
  def wrapper(*args, **kwargs):
   print('wrapper func:', *args, **kwargs)
   if auth_type == 'local':
    username = input('username:').strip()
    password = input('password:').strip()
    if user == username and password == passwd:
     print('\033[32;1mUser has passed authentication\033[0m')
     res = func(*args, **kwargs)
     return res
    else:
     exit('\033[32;1mInvalid Username or password\033[0m')
   elif auth_type == 'ldap':
    print('ldap,不会')
  return wrapper
 return outher_wrapper

def index():
 print('welcome to index page')
@auth(auth_type='local') # home = outher_wrapper(home)
def home():
 print('welcome to home page')
 return 'from home'
@auth(auth_type='ldap')
def bbs():
 print('welcome to bbs page')

index()
print(home())
bbs()

Decorator

以上所述是小编给大家介绍的Python装饰器详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对【听图阁-专注于Python设计】网站的支持!

相关文章

python+pyqt5实现KFC点餐收银系统

python+pyqt5实现KFC点餐收银系统

本文实例为大家分享了python实现KFC点餐收银系统的具体代码,供大家参考,具体内容如下 这个kfc收银系统我实现了的以下功能: 1.正常餐品结算和找零。 2.基本套餐结算和找零。 3...

Python遍历某目录下的所有文件夹与文件路径

Python遍历某目录下的所有文件夹与文件路径

本文与《【Java】读取其下所有文件夹与文件的路径》 (点击打开链接)为姊妹篇,主要讲述Python对于文件信息的读取操作。 Python对于文件信息的读取操作,在其固有类os中。 下面...

python+Django实现防止SQL注入的办法

先看看那种容易被注入的SQL id = 11001 sql = """ SELECT id, name, age FRO...

Python字符串匹配算法KMP实例

本文实例讲述了Python字符串匹配算法KMP。分享给大家供大家参考。具体如下: #!/usr/bin/env python #encoding:utf8 def next(patt...

PyCharm2019安装教程及其使用(图文教程)

PyCharm2019安装教程及其使用(图文教程)

下载PyCharm PyCharm官网下载:https://www.jetbrains.com/pycharm/download/ 安装PyCharm 1、双击exe,进入“欢迎...