python装饰器的默认输入和函数输入

问题描述

如果装饰器没有输入,并且装饰的函数没有输入,我想编写一个认的装饰器。

这里是一个示例,摘自Sebastiaan Mathot的Python装饰器教程,以说明问题(https://youtu.be/pr1xfd6oTwY): 如果此装饰器有一个参数,则它将一个随机数乘以0.5的幂,否则将乘以2的幂

import random

def power_of(arg):
    def decorator(fnc):
        def inner():
            return fnc() ** exponent
        return inner
    # cheks if decorator takes an argument and def default otherwise
    if callable(arg):
        exponent = 2
        return decorator(arg)
    else:
        exponent = arg
        return decorator

@power_of(.5)
def random_odd_digit():
    
    return random.choice([1,3,5,7,9])


print(random_odd_digit())

我知道他在这里做什么,但是如果我想用这样的输入调用random_odd_digit函数呢?

@power_of(.5)
def random_odd_digit(X):
    
    return random.choice(X)

print(random_odd_digit([1,9]))

我知道提供内部函数和参数是可行的:

import random

def power_of(arg):
    def decorator(fnc):
        def inner(x):
            return fnc(x) ** exponent
        return inner
    
    if callable(arg):
        exponent = 2
        return decorator(arg)
    else:
        exponent = arg
        return decorator

@power_of(.5)
def random_odd_digit(x):    
    return random.choice(x)

print(random_odd_digit([1,9]))

但是我该如何编码,以便输入版本起作用?

我需要在装饰器函数中的某处添加其他(如果可调用)检查吗?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)