我知道装饰器可以扩展功能,而无需更改原始功能。因此在“真实示例”中,装饰器对于记录或计时功能很有用。
,我的问题是..我只为一个功能而不是其他功能制作装饰器。装饰器依赖于这样的原始功能。
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
。.我想知道这种装饰器通常是好的还是不好的。
请告诉我您的建议。
答案 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)