1.有参装饰器

基本版

def auth(argv):def wrapper(f):def inner(*args,**kwargs):f(*args,**kwargs)return innerreturn wrapper

示例:

login_dic = {"username": None, "flag": False}
msg = """请选择app:
QQ
微信
抖音
邮箱
"""chose = input(msg).upper()
def auth(argv):def wrapper(f):def inner(*args,**kwargs):if login_dic["flag"]:f(*args,**kwargs)else:if argv == "QQ":print("欢迎登陆QQ")user = input("请输入账号:")password = input("请输入密码:")if user == "alex" and password == "alex123":login_dic["flag"] = Truelogin_dic["username"] = userf(*args,**kwargs)else:print("账号或者密码错误")elif argv == "微信":print("欢迎登陆微信")user = input("请输入账号:")password = input("请输入密码:")if user == "alex123" and password == "alex123456":login_dic["flag"] = Truelogin_dic["username"] = userf(*args, **kwargs)else:print("账号或者密码错误")elif argv == "抖音":print("欢迎登陆抖音")user = input("请输入账号:")password = input("请输入密码:")if user == "alex456" and password == "alex456123":login_dic["flag"] = Truelogin_dic["username"] = userf(*args, **kwargs)else:print("账号或者密码错误")else:print("欢迎登陆邮箱")user = input("请输入账号:")password = input("请输入密码:")if user == "alex@qq.com" and password == "alex123":login_dic["flag"] = Truelogin_dic["username"] = userf(*args, **kwargs)else:print("账号或者密码错误")return innerreturn wrapper@auth(chose)
def foo():print("这是一个被装饰的函数")
foo()# @auth(chose) 相等于以下两行代码的解构
# wrapper = auth(chose)
# foo = wrapper(foo)

2.多个装饰器装饰一个函数

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def wrapper1(func):def inner1(*args,**kwargs):print(1)func(*args,**kwargs)print(11)return inner1def wrapper2(func):def inner2(*args,**kwargs):print(2)func(*args,**kwargs)print(22)return inner2def wrapper3(func):def inner3(*args,**kwargs):print(3)func(*args,**kwargs)print(33)return inner3@wrapper3
@wrapper2
@wrapper1
def foo():print("这是一个被装饰的函数")foo()#3
2
1
这是一个被装饰的函数
11
22
33

python有参装饰器 多个装饰器装饰一个相关推荐

  1. python 装饰器实现事件绑定_Python装饰器是怎么实现的?

    Python中的装饰器是通过利用了函数特性的闭包实现的,所以在讲装饰器之前,我们需要先了解函数特性,以及闭包是怎么利用了函数特性的 ① 函数特性 python中的函数特性总的来说有以下四点: 1. 函 ...

  2. python中的装饰器(以及多个装饰器详细执行过程)

    装饰器 1.如果要增强一个函数的功能,但又不希望更改原函数中的代码,这种在代码运行期间动态增加功能的机制被称为装饰器   [Decorator] 2. 本质:实际上就是一个闭包,只不过被装饰的函数需要 ...

  3. python装饰器编程_Python编程中装饰器的使用示例解析

    装饰函数和方法 我们先定义两个简单的数学函数,一个用来计算平方和,一个用来计算平方差: # get square sum def square_sum(a, b): return a**2 + b** ...

  4. python装饰器的通俗理解_python装饰器的通俗理解

    在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略有领悟,我希望以下的内容会对你有帮助,我也努力通过通俗的方式使得对Py ...

  5. python装饰器作用和功能_python装饰器大详解

    一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我们要理解两点: a.在全局不能访问到局 ...

  6. python 装饰器 继承_Python设计模式之装饰器模式

    装饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) 使用组合 使用继承 注意,本文中的Decorat ...

  7. Python装饰器的实现和万能装饰器

    Python装饰器的实现和万能装饰器 在Python中,装饰器是在不改变已有函数的代码的前提下,给函数增加新的功能的一种函数. 装饰器接收一个函数作为参数,返回值也是一个函数. 在Python中,实现 ...

  8. Python:闭包(简介、使用方法、nonlocal修改闭包内使用的外部变量)、装饰器(定义、作用、通用装饰器、多个装饰器、带参数的装饰器、类装饰器、装饰器方式添加WEB框架的路由)

    一.闭包的介绍 闭包可以保存函数内的变量 当闭包执行完毕,外部函数的变量才释放. # 闭包的作用:可以保存外部函数的变量 # 闭包的形成条件 # 1.函数嵌套 # 2.内部函数使用了外部函数的变量或者 ...

  9. python装饰器有几种_Python装饰器使用你可能不知道的几种姿势

    前言 在Python中,装饰器是一种十分强大并且好用的语法,一些重复的代码使用装饰器语法的话能够使代码更容易理解及阅读. 因此在这里简单总结了一下Python中装饰器的几种用法以及需要注意的事情. 一 ...

  10. python生成器和装饰器_python之yield与装饰器

    防伪码:忘情公子著 python中的yield: 在之前发布的<python之列表解析与生成器>中我们有提到过,生成器所实现的是跟列表解析近似的效果,但是我们不能对生成器做一些属于列表解析 ...

最新文章

  1. 【2017-12-08】c#基础-程序开发思路初认识
  2. Windows环境安装Gradle6.4.1
  3. 面试篇---1 如何区分深拷贝与浅拷贝
  4. 前端工程师后端转型实录
  5. easyui combobox默认选中项
  6. 北方人思想为什么落后_广西人为什么很少到北方打工?
  7. WORD如何将多文档快速汇总到一份WORD文件里面?
  8. 电脑安装python3.74_在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
  9. pycharm + python36 + opencv + opencv_contrib库的安装
  10. 百度BML 图像分类-多标签在线API调试结果记录
  11. php上拉下拉 数据库加载,jquery使用iscorll实现上拉、下拉加载刷新
  12. Python数据处理Tips日期、时间数据处理方法汇总
  13. 简单几步教你爬取IOS手机端APP数据
  14. JVM(四).Class 文件结构(附字节码完整解析)
  15. cint、int、fix的区别
  16. 使用h5制作一个五子棋游戏
  17. 手机连接电脑后,电脑上显示不出来手机的文件夹
  18. PS制作android图标
  19. Java并发编程(一)—— FutureTask超详细教程
  20. 写一个在线位图字体制作工具!BitmapFont!

热门文章

  1. springMVC3学习--ModelAndView对象(转)
  2. 蚁群算法和简要matlab来源
  3. 南阳18--The Triangle
  4. “亚信科技杯”南邮第七届大学生程序设计竞赛之网络预赛 (K L题解)
  5. POJ 3481 Double Queue
  6. 如何数据整合IBM Tivoli
  7. Amazon运营如何做?Amazon运营需做好全局的加减法
  8. 鸿蒙9月11日,鸿蒙2.0版9月11日正式发布,华为将迎来新的突破,具有历史意义!...
  9. 图像缩放算法_技术专栏|基于无人机LK光流算法的适用性及其优化方法探究
  10. oracle 创建视图时提示自定义的函数功能名不管用_PCS 7 CFC的常用功能与操作