Python декоратор только для одной функции в целом бесполезен, верно? - PullRequest
0 голосов
/ 20 октября 2018

Я знаю, что декоратор может расширить функциональные возможности без изменения оригинальной функции.В случае с примерами из реального мира декоратор полезен для регистрации или функций синхронизации.

и мой вопрос: я делаю декоратор только для одной функции, а не для другой.Декоратор зависит от оригинальной функции, как это.

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 голосов
/ 20 октября 2018

Как указано в Zen of Python Простое лучше, чем сложное.Добавление оболочки в этом случае только запутывает код и затрудняет его чтение.Важно знать, как их писать, но ваш код будет легче читать, если вы переместите only_compare_file_value_decorator реализацию в compare_file_value тело.Вы также используете *args, когда вы действительно ожидаете 2 имени файла в качестве ввода, что также запутывает код.

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)
...