python 装饰器--对有无参数的函数进行装饰

ぃ、小莉子 提交于 2020-02-07 02:57:30

# 使用装饰器无参数的函数进行装饰
# def func(funcionName):
  # print('-----1------')
  # def func_in():
    # print('--func_in---')
    # funcionName()
    # print('--func_2---')
  # print('-----2------')
  # print('-----3------')
  # return func_in

# @func # test = func(test)
# def test():
  # print('----testa=%d,b=%d-----'%)

# test()
# -----1------
# -----2------
# -----3------
# --func_in---
# ----test-----
# --func_2---


# 使用装饰器对有参数的函数进行装饰
# def func(funcionName):
  # print('-----1------')
  # def func_in(a,b): #如果a,b没有定义,那么会导致40号调用失败
    # print('--func_in---')
    # funcionName(a,b) # 如果没有把a,b当做实参进行传递,那么会导致调用37行失败
    # print('--func_2---')
  # print('-----2------')
  # print('-----3------')
  # return func_in

# @func
# def test(a,b): #37行
# print('----test---a=%d,b=%d-----'%(a,b))

# test(10,11) #40行

 

# 对不定性参数传递
def func(funcionName):
  print('-----func---1------')
  def func_in(*args,**kwargs):
    # *args 将来是以元组保存,没有进行拆包
    # **kwargs 将来是以字典保存,没有进行拆包

    print('--func_in---1---')
    funcionName(*args,**kwargs)
    print('--func_in----2---')
  print('-----func---2------')
  return func_in

@func
def test(a,b,c):
print('----test---a=%d,b=%d,c=%d-----'%(a,b,c))


@func
def test2(a,b,c,d):
  print('----test---a=%d,b=%d,c=%d,d=%d-----'%(a,b,c,d))

test(10,11,9)
test2(10,11,9,11)
# -----func---1------
# -----func---2------
# -----func---1------
# -----func---2------
# --func_in---1---
# ----test---a=10,b=11,c=9-----
# --func_in----2---
# --func_in---1---
# ----test---a=10,b=11,c=9,d=11-----
# --func_in----2---

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!