Python 带参的装饰器

版权声明:本文为博主原创文章,转载请注明原文链接。 https://blog.csdn.net/Frank_Abagnale/article/details/82143756

本文是我在学习时的篇笔记,示例代码可能存在直接引用学习资料的情况。
在看了解Python带参装饰器之前可以先了解一下Python装饰器

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
    @decorator的用法,装饰器默认它后面的函数是唯一的参数。装饰器的语法允许
我们调用decorator时,提供其它参数,比如@decorator(a)。这样,就为装饰器的编
写和使用提供了更大的灵活性。
    带参的方式其实是在之前不带参数的修饰器的实现上再套一层闭包
'''

# a new wrapper layer
def pre_str(pre=''):
    # old decorator
    def decorator(F):
        def new_F(a, b):
            print pre + "\n"+"input", a, b
            return F(a, b)
        return new_F
    return decorator

# get square sum
@pre_str('^_^')
def square_sum(a, b):
    return a**2 + b**2

# get square diff
@pre_str('T_T')
def square_diff(a, b):
    return a**2 - b**2

## 这个方法是没有修饰器修饰的
def product(x,y):
  return x*y

if __name__ == "__main__":
  print square_sum(3, 4)
  print square_diff(3, 4)
  ## 下面换一种玩法
  f = pre_str("=_=")
  f2 = f(product)
  print f2(3,4)

猜你喜欢

转载自blog.csdn.net/Frank_Abagnale/article/details/82143756