# 使用装饰器对有返回值的函数进行装饰
# def func(functionName):
  # print('---func-1----')
  # def func_in():
    # print("----func_in---1-")
    # x = functionName() #保存返回来的hahah
    # print("----func_in---2-")
    # return x
  # print('---func-2----')
  # return func_in

# @func
# def test():
  # print("-----test-----")
# return "haha"

# ret = test()
# print("test return value is %s"%ret)

# ---func-1----
# ---func-2----
# ----func_in---1-
# -----test-----
# ----func_in---2-
# test return value is haha

# 使用通用装饰器对函数进行装饰
# def func(functionName):
  # def func_in(*args,**kwatgs):
    # print("记录日志")
    # x = functionName(*args,**kwatgs)
    # return x
  # return func_in

# @func
# def test():
  # print("-----test-----")
# return "haha"

# ret = test()
  # print("test return value is %s"%ret)
# # -----test-----
# # test return value is haha

# @func
# def test2():
  # print("----test2----")

# a = test2()
  # print(a)
# # ----test2----
# # None

# @func
# def test3(a):
  # print("-----test3----a=%d"%a)

# test3(10)
# -----test3----a=10

# 记录日志
# -----test-----
# test return value is haha

# 记录日志
# ----test2----
# None

# 记录日志
# -----test3----a=10

# 带有参数的装饰器、、
def func_arg(arg):
  print(arg)
  def func(functionName):
    print('----func----')
    def func_in():
      print("--记录日志---")
      print(arg)
      if arg=='呵呵':
        functionName()
        functionName()
      else:
        functionName()
    return func_in
  return func

# 1.先执行func_arg('呵呵')函数,这个函数return的结果是func这个函数的引用
# 2.@func
# 3.使用@func对test进行装饰

# 带有参数的装饰器,能够起到在运行时,有不同的功能
@func_arg('呵呵')
def test():
  print("-----test-----")

ret = test()
# 呵呵
# ----func----
# --记录日志---
# -----test-----

@func_arg("haha")
  def test2():
print("--test2--")

test2()

# haha
# ----func----
# --记录日志---
# haha
# --test2--

python 通用装饰器,带有参数的装饰器,的更多相关文章

  1. python之带有参数的装饰器

    一个小demo def set_level(level_num): def set_func(func): def call_func(*args, **kwargs): if level_num = ...

  2. python 装饰器 第七步:带有参数的装饰器

    #第七步:带有参数的装饰器 #两个基本函数用同一个装饰器装饰 def outer(arg): print(arg) #这是装饰器的代码 def kuozhan(func): print(func) # ...

  3. python 装饰器 第五步(1):带有参数的装饰器

    #第五步:带有参数的装饰器 #用于扩展基本函数的函数 def kuozhan(func): #内部函数(扩展之后的eat函数) #5由于调用的时候传了两个参数,未来的eat函数没有参数接收 #5报错的 ...

  4. Python 带有参数的装饰器

    def wrapper_out(flag): # 装饰器本身的参数 def wrapper(fn): # 目标函数 def inner(*args, **kwargs): # 目标函数执行需要的参数 ...

  5. [python] 带有参数并且传递参数的装饰器

    场景时这样的,我有个一大堆任务,我要给这些任务计时,入库.就需要一个带有参数的装饰器来记录任务名称, 在任务执行前和执行之后都需要记录任务当时执行的时刻. #-*- encoding=utf-8 -* ...

  6. Python带参数的装饰器

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

  7. Python 基础之面向对象之八步理解装饰器

    装饰器:在不改变原有代码的情况下,为该原函数扩展新功能特征:返回新函数,替换旧函数语法:@ 语法糖 1.装饰器原型 #例1: def kuozhan(func):    def newfunc():  ...

  8. python基础之迭代器、生成器、装饰器

    一.列表生成式 a = [0,1,2,3,4,5,6,7,8,9] b = [] for i in a: b.append(i+1) print(b) a = b print(a) --------- ...

  9. Python 带参数的装饰器 [2] 函数参数类型检查

    在Python中,不知道函数参数类型是一个很正常的事情,特别是在一个大项目里.我见过有些项目里,每一个函数体的前十几行都在检查参数类型,这实在是太麻烦了.而且一旦参数有改动,这部分也需要改动.下面我们 ...

随机推荐

  1. Lock类-ReentrantLock的使用

    在Java多线程中可以使用synchronized隐式锁实现线程之间同步互斥,Java5中提供了Lock类(显示锁)也可以实现线程间的同步,而且在使用上更加方便.本文主要研究 ReentrantLoc ...

  2. HDOJ 1217 Arbitrage (最短路)

    题意:每两种货币之间都有不同的汇率  如果换回自己最后是赚的 输出Yes 否则是No 因为最多只有三十种货币 所以用Floyd是可行的 与一般的最短路板子不同的地方 汇率是要乘而不是加 如果乘上一个小 ...

  3. platform模块

    import platform ''' python中,platform模块给我们提供了很多方法去获取操作系统的信息 如: import platform platform.platform() #获 ...

  4. 【转】Python数据类型之“文本序列(Text Sequence)”

    [转]Python数据类型之“文本序列(Text Sequence)” Python中的文本序列类型 Python中的文本数据由str对象或字符串进行处理. 1.字符串 字符串是Unicode码值的不 ...

  5. CLR via C#关于泛型(Generics )的摘录

    泛型,是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”. 简单的说,开发人员先定义好一个算法,比如排序.搜索.交换.比较或者转换等.但是,定义算法的开发人员并不设改算法 ...

  6. hibernate框架学习第四天:关联关系、外键、级联等

    一对多关联关系表 一方 多方(外键)实体类 一方:TeacherModel 添加多方的集合Set 多方StudentModel 添加一方的对象一方配置关系 name:一方模型中描述多方的集合对象名 c ...

  7. FHQ Treap摘要

    原理 以随机数维护平衡,使树高期望为logn级别 不依靠旋转,只有两个核心操作merge(合并)和split(拆分) 因此可持久化 先介绍变量 ; int n; struct Node { int v ...

  8. 【BZOJ 2119】股市的预测(SAM)

    SAM很好用的啊... 传送门 双倍经验:L-Gap Substrings 基本做法类似,这道题的差分改掉,map 改掉就好了QWQ noteskey 反正就是先差分一下,然后把首项丢掉(没有比较的对 ...

  9. var_export 掉咋天

    var_export     文件缓存经常使用    输出或返回一个变量的字符串表示 /** * 写入缓存 * * @param string $id * @param mixed $data * @ ...

  10. CLOB数据类型截取SUBSTR_按开始位置偏移量

    --DBMS_LOB.substr不加参数表示全部截取,负向截取待定 CREATE OR REPLACE FUNCTION CLOB_SUBSTR( V_CLOB CLOB, N_OFFSET NUM ...