"""
  
  装饰器,带参数的装饰器,类的装饰器
  
  判断是否为可迭代的
  
  from collections import Iterable
  
  print(isinstance([1,2,3],Iterable))
  
  """
  
  # 1、简单的装饰器
  
  def debug(func):
  
  def wrap():
  
  print(f'debug:func name is {func.__name__}')
  
  return func()
  
  return wrap
  
  @debug
  
  def calculate():
  
  return 1+2
  
  print(calculate())
  
  # 2、装饰器带参数,先接受的是参数,后接受的是函数
  
  def debug(parameter):
  
  def wrapper(func):
  
  def wrap():
  
  print(f'debug:func name is {func.__name__}')
  
  print(f'debug:func parameter is {parameter}')
  
  return func()
  
  return wrap
  
  return wrapper
  
  @debug('testdata')
  
  def calculate():
  
  return 1+2
  
  print(calculate())
  
  # 3、装饰带参数的函数,需要将参数给定义的wrap
  
  def debug(func):
  
  def wrap(a, b):
  
  print(f'debug:func name is {func.__name__}')
  
  return func(a, b)
  
  return wrap
  
  @debug
  
  def calculate(a,b):
  
  return a+b
  
  print(calculate(1,2))
  
  """
  
  函数修饰函数
  
  4、装饰器带参数,同时装饰的函数也带参数
  
  """
  
  def debug(parameter):
  
  def wrapper(func):
  
  def wrap(c, d):
  
  print(f'debug:func name is {www.shengchangyule.net func.__name__}')
  
  print(f'debug:func parameter is {parameter}')
  
  return func(c, d)
  
  return wrap
  
  return wrapper
  
  @debug('data')
  
  def calculate(c, d):
  
  return c*d
  
  print(calculate(5,7))
  
  """
  
  函数修饰类
  
  5、带参数的函数装饰器 装饰 带参数的类
  
  """
  
  def debug(parameter):
  
  def inner(func):
  
  def wrap(a,b):
  
  print("class name:www.yongxin7.cn/", func.__name__)
  
  print("genrator parameter is:", parameter)
  
  return func(a,b)
  
  return wrap
  
  return inner
  
  @debug('get')
  
  class Calculate(object):
  
  def __init__(self,a,b):
  
  self.a = a
  
  self.b = b
  
  def cal(self):
  
  num = self.a + self.b
  
  return num
  
  def sal(self):
  
  cnum = self.a * self.b
  
  return cnum
  
  c = Calculate(3,4)
  
  print(c.cal())
  
  """
  
  类装饰函数
  
  6,带参数的类装饰器 修饰 带参数的函数
  
  ini里面接受的是装饰器的参数,如果无参数则接受的是函数名
  
  """
  
  class Debug(object):
  
  def __init__(self,parameter):
  
  self.parameter www.365soke.com= parameter
  
  def __call__(self, func):
  
  def wrap(a,b):
  
  print('function name is', func.__name__)
  
  print('debug parameter is', self.parameter)
  
  return func(a,b)
  
  return wrap
  
  @Debug('post')
  
  def calculate(a,b):
  
  c = a * b
  
  return c
  
  print(calculate(2,5))
  
  """
  
  类装饰类
  
  7 带参数的类装饰器 装饰 带参数的类
  
  """
  
  class Debug(object):
  
  def __init__(self, parameter):
  
  self.parameter = parameter
  
  def __call__(self, func):
  
  def wraps(a,b):
  
  print('function name www.shengchanyule.com is', func.__name__)
  
  print('debug parameter is', self.parameter)
  
  return func(a,b)
  
  return wraps
  
  @Debug('get')
  
  class Calculate(object):
  
  def __init__(self,a,b):
  
  self.a = a
  
  self.b = b
  
  def cal(self):
  
  num = self.a + self.b * self.a
  
  return num
  
  c = Calculate(5,3)
  
  print(c.cal())

python之各种装饰器的使用的更多相关文章

  1. python高级之装饰器

    python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函数的定义: 满足下面两个条件之 ...

  2. [python基础]关于装饰器

    在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...

  3. python笔记 - day4-之装饰器

                 python笔记 - day4-之装饰器 需求: 给f1~f100增加个log: def outer(): #定义增加的log print("log") ...

  4. Python深入05 装饰器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法 ...

  5. Day04 - Python 迭代器、装饰器、软件开发规范

    1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...

  6. Noah的学习笔记之Python篇:装饰器

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  7. 第二篇:python高级之装饰器

    python高级之装饰器   python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函 ...

  8. 简单说明Python中的装饰器的用法

    简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下   装饰器对与 ...

  9. Python进阶之装饰器

    函数也是对象 要理解Python装饰器,首先要明白在Python中,函数也是一种对象,因此可以把定义函数时的函数名看作是函数对象的一个引用.既然是引用,因此可以将函数赋值给一个变量,也可以把函数作为一 ...

  10. Python的property装饰器的基本用法

    Python的@property装饰器用来把一个类的方法变成类的属性调用,然后@property本身又创建了另一个装饰器,用一个方法给属性赋值.下面是在类中使用了@property后,设置类的读写属性 ...

随机推荐

  1. Spring AOP详细介绍

    AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Asp ...

  2. 分析一个react项目

    目录结构 下面是使用npx create-react-app web-app来创建的一个项目(已经删除了多余的文件) web-app ├── node_modules │   ├── ....... ...

  3. 学习PHPExcel

    关于PHPExcel使用方法,可以参考慕课网的教程,链接在此 PHPExcel的github地址:https://github.com/PHPOffice/PHPExcel 下载之后,将文件夹中的Cl ...

  4. virtualization - Ubuntu Budgie screen distortion in Hyper-V - Ask Ubuntu

    virtualization - Ubuntu Budgie screen distortion in Hyper-V - Ask Ubuntuhttps://askubuntu.com/questi ...

  5. 什么是arp协议?

    转自:https://blog.csdn.net/tigerjibo/article/details/7351992 ARP (Address Resolution Protocol) 是个地址解析协 ...

  6. day 7-6 多线程及开启方式

    一. 什么是线程 线程:顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程 ...

  7. java使用顺序存储实现队列

    详细连接  https://blog.csdn.net/ljxbbss/article/details/78135993 操作系统:当电脑卡的时候,如果不停点击,还是卡死,最后终于电脑又好了以后,操作 ...

  8. Entity Framework 6 自定义连接字符串ConnectionString连接MySQL

    在开始介绍之前,首先来看看官方对Entity Framework的解释:Entity Framework (EF) is an object-relational mapper that enable ...

  9. 利用Python制作简单的小程序:IP查看器

    前言 说实话,查看电脑的IP,也挺无聊的,但是够简单,所以就从这里开始吧.IP地址在操作系统里就可以直接查看.但是除了IP地址,我们也想通过IP获取地理地址和网络运营商情况.IP地址和地理地址并没有固 ...

  10. Lodop获取全部JS代码,传统JS模版的生成

    Lodop模版有两种方法,一种是传统的JS语句,可以用JS方法里的eval来执行,一种是文档式模版,是特殊格式的base64码,此篇博文介绍传统JS模版的生成方法.两种模版都可以存入一下地方进行调用, ...