通常只有一个功能的python装饰器通常没有用,对吧?

时间:2018-10-20 06:34:02

标签: python python-decorators

我知道装饰器可以扩展功能,而无需更改原始功能。因此在“真实示例”中,装饰器对于记录或计时功能很有用。

,我的问题是..我只为一个功能而不是其他功能制作装饰器。装饰器依赖于这样的原始功能。

def read_file(file_path):
    file_data=''
    with open(file_path) as f:
       file_data = f.read()
    return file_data

def only_compare_file_value_decorator(f):
    def wrapper(*args):
        d1 = read_file(args[0]) 
        d2 = read_file(args[1])
        return f(d1,d2)
    return wrapper

@only_compare_file_value_decorator
def compare_file_value(*args):
    return compare_hash(args[0], args[1])

在上述情况下,only_compare_file_value_decorator仅适用于功能compare_file_value。.我想知道这种装饰器通常是好的还是不好的。 请告诉我您的建议。

1 个答案:

答案 0 :(得分:1)

Zen of Python中所述,简单胜于复杂。在这种情况下,添加包装器只会混淆代码并使其更难阅读。知道如何编写它们很重要,但是如果将only_compare_file_value_decorator实现转移到compare_file_value主体中,则代码将更易于阅读。当您确实希望输入2个文件名时,也可以使用*args,这也会混淆代码。

def read_file(file_path):
    file_data=''
    with open(file_path) as f:
       file_data = f.read()
    return file_data


def compare_file_value(file_name_1, file_name_2):
    file1, file2 = read_file(file_name_1), read_file(file_name_2)
    return compare_hash(file1, file2)