1. 带参数的装饰器讲解
# !/usr/bin/env python
# -*- coding:utf-8 -*-# 1、带参数的装饰器
def wrapper_out(parameter):print(parameter)def wrapper(func):def inner(*args, **kwargs):ret = func(*args, **kwargs)return retreturn innerreturn wrapper"""
@wrapper_out('企鹅') 分析解读:
当函数执行到带参数装饰器 @wrapper_out('企鹅') 这句时,分两步执行:1.执行wrapper_out('企鹅')这个函数,把相应的参数'微信'传给parameter,并且得到返回值wrapper函数名2.将@与wrapper结合,得到我们之前熟悉的标准版的装饰器,按照装饰器的执行流程执行。
"""@wrapper_out('企鹅')
def qq():print('成功登录企鹅!')qq()
  1. 带参数装饰器的应用
# 2、带参数装饰器应用:
"""
两个不同软件微信和淘宝,有不同的账户和密码,
根据不同软件的登录,写个装饰器验证登录功能
账户文件名:wechat,账户albert|123
账户文件名:taobao,账户don|456
"""def wrapper_out(parameter):def wrapper(func):def inner(*args, **kwargs):if parameter == 'wechat':username = input('请输入用户名:').strip()password = input('请输入密码:').strip()with open('wechat', encoding='utf-8', mode='r') as f:for line in f:user, pwd = line.strip().split('|')if user == username and pwd == password:ret = func(*args, **kwargs)return retreturn Falseelif parameter == 'taobao':username = input('请输入用户名:').strip()password = input('请输入密码:').strip()with open('taobao', encoding='utf-8', mode='r') as f:for line in f:user, pwd = line.strip().split('|')if user == username and pwd == password:ret = func(*args, **kwargs)return retreturn Falsereturn innerreturn wrapper@wrapper_out('wechat')
def wechat():print('成功登录微信!')wechat()@wrapper_out('taobao')
def taobao():print("成功登录淘宝!!!")taobao()
  1. 带参数装饰器应用最终版:(优化版)
# 3、带参数装饰器应用:优化版
"""
两个不同软件微信和淘宝,有不同的账户和密码,
根据不同软件的登录,写个装饰器验证登录功能
账户文件名:wechat,账户albert|123
账户文件名:taobao,账户don|456
"""def wrapper_out(parameter):def wrapper(func):def inner(*args, **kwargs):username = input('请输入用户名:').strip()password = input('请输入密码:').strip()# 注意文件名需要与装饰器传入参数一致,增强耦合性思想with open(parameter, encoding='utf-8', mode='r') as f:for line in f:user, pwd = line.strip().split('|')if user == username and pwd == password:ret = func(*args, **kwargs)return retreturn Falsereturn innerreturn wrapper@wrapper_out('wechat')
def wechat():print('成功登录微信!')wechat()@wrapper_out('taobao')
def taobao():print("成功登录淘宝!!!")taobao()

Python 带参数的装饰器相关推荐

  1. Python带参数的装饰器

    在装饰器函数里传入参数 # -*- coding: utf-8 -*- # 2017/12/2 21:38 # 这不是什么黑魔法,你只需要让包装器传递参数: def a_decorator_passi ...

  2. python带参数的装饰器_Python-----带参数的装饰器以及补充

    带参数的装饰器 def wrapper_out(n): # def wrapper(f): # def inner(*args,**kwargs): # # if n == 'qq': # # use ...

  3. python带参数的装饰器的作用_Python带参数的装饰器运行原理解析

    关于装饰器的理解,特别像<盗梦空间>中的进入梦境和从梦境出来的过程,一层一层的深入梦境,然后又一层一层的返回,被带入梦境的是被装饰的函数,装饰器就是使人入梦的工具. 上代码: from f ...

  4. python 装饰器 参数-python函数装饰器之带参数的函数和带参数的装饰器用法示例...

    本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(fun ...

  5. python 装饰器 参数-[Python]写个带参数的装饰器

    上篇文章 Python装饰器为什么难理解?从函数到装饰器一步一步介绍了Python装饰器的来由,不知你对装饰器理解了没有,强烈建议你自己动手写个装饰器应用到项目中加深理解.装饰器可以很简单,也可以很复 ...

  6. python装饰器函数-python函数装饰器之带参数的函数和带参数的装饰器用法示例

    本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(fun ...

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

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

  8. python装饰器模式带参数_Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)...

    Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...

  9. python装饰器模式带参数_python函数装饰器、类装饰器和带参数的装饰器——装饰器模式...

    装饰器模式: 动态地给对象添加一些额外的职责,就增加功能来说,装饰模式比生产子类更加灵活 Component 是定义一个对象接口,可以给这些对象动态地添加职责.concreteComponent是定义 ...

最新文章

  1. 全球五大顶级域名一周统计 .BIZ环比上升7.3%
  2. hust1350Trie【字典树+dfs || 字典树 + LCA】
  3. 03、Vue.js---自定义指令
  4. 苹果部分机器将转向美国国内生产
  5. jQuery.extend() 使用语法详解
  6. Advanced C++ --- const function
  7. PCL—低层次视觉—点云滤波(基于点云频率)
  8. Linux 命令源码 —— cat
  9. 未来教育c语言二级51套答案,未来教育版计算机二级C语言上机题库(含答案)
  10. php官网软件下载,php下载_php官方下载_3DM软件
  11. STM32 磁场传感器HMC5883
  12. SOLIDWORKS流体分析为什么两栋楼之间会感觉风大
  13. Invisible character on env file, cause programe abort abnormally
  14. Unlocker-最好的顽固文件删除工具使用说明
  15. HDU1255 覆盖的面积 (线段树 + 扫描线)
  16. STM32驱动BH1750模块
  17. 6.S081 lab: networking e1000 网卡驱动 附 Linux 网卡驱动编写分析
  18. MATLAB中的清除命令
  19. jsp+servlet实现注册,登录等的案例
  20. Delphi Class of

热门文章

  1. 分布式ID生成器及snowflake(雪花)算法实现
  2. linux nginx htaccess,nginx支持.htaccess文件实现rewrite伪静态
  3. 技术管理需要具备的职业素养
  4. VMware ESXi 8.0U1 Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)
  5. Mysql导入数据库
  6. pythonocc进阶学习:分割面/合并面(体)splitter/glue
  7. 公网搭建Kubernetes 1.20.9(阿里云+腾讯云)
  8. linux修改硬件系统时间,Linux修改日期、时间,系统与硬件时间
  9. 销售成本与收入不在同一会计期间(二)
  10. 玩转3D Swiper美女性感秀之思路分析总结