【问题标题】:Using a parameterized decorator in python在 python 中使用参数化装饰器
【发布时间】:2016-11-14 16:24:44
【问题描述】:

我很难理解参数化装饰器的概念及其工作原理。有人可以在下面的示例中解释它是如何工作的以及装饰器基础是什么样的:

@base(10)
def sum(x,y):
    return x+y

print(sum(1,2))

【问题讨论】:

标签: python decorator python-decorators


【解决方案1】:

代码会说一千多个单词:

def int2base(x, base):
    """ Converts int to string with given base representation.
        Credit to @Alex Martelli on http://stackoverflow.com/questions/2267362/convert-integer-to-a-string-in-a-given-numeric-base-in-python"""

    if x < 0: sign = -1
    elif x == 0: return digs[0]
    else: sign = 1
    x *= sign
    digits = []
    while x:
        digits.append(digs[x % base])
        x //= base
    if sign < 0:
        digits.append('-')
    digits.reverse()
    return ''.join(digits)


def base(num):
    def decorator(func):
        def wrapper(*args):
            return int2base(func(*args), num)
        return wrapper
    return decorator


def my_sum(num1, num2):
    return num1 + num2

# using decorator syntax
@base(2)
def my_sum2(num1, num2):
    return num1 + num2

print(my_sum(1,2))
print(my_sum2(1,2))

# decorating manually
decorator = base(2) # base acts kinda like factory method
my_sum2_manual = decorator(my_sum)
print(my_sum2_manual(1,2))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-12
    • 2011-11-21
    • 2014-07-21
    • 1970-01-01
    • 2018-01-21
    • 2022-11-12
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多