Оболочка Python вызывает избыточные вызовы функций - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть функция, которая загружает файл с заданного URL-адреса и вызывается из функции более высокого уровня, т. Е. main().

from requests import get
...

def download_file(url):
    response = get(url)
    ...
    <error checks on response>
    ...
    # if no error, write response to file
    ...
    file.write(response)

def main(url):
    ...
    download_file(url)

Однако я понял, что должен поместить всю ошибкупроверяет объект response вне функции download_file.Итак, я попытался обернуть функцию download_file так, чтобы все проверки ошибок происходили вне ее.

def check_errors(func):
    def check_and_download(url):
        response = get(url)   
        ...
        <error checks on response>
        ...
        return func(url) # <- I have to call response = get(url) again. That's bad
    return check_and_download

Как вы можете видеть, эта оболочка заставляет response вызываться дважды.Один раз за пределами функционала и один раз внутри.Это просто избыточно.Я пытаюсь найти способ, который позволит мне вызывать response только один раз и загружать файл с проверкой ошибок вне функции download_file.

Мне кажется, что это должно быть обычной проблемой для начинающих, но я не смог найти соответствующие вопросы здесь.Любые предложения о том, как правильно с этим справиться?

PS : Один из подходов, которые я выбрал, состоял в том, чтобы изменить функцию download_file, чтобы вместо нее принимать объект response или URL, чтобыоболочка может передать объект ответа с проверкой на ошибки.Однако проблема в том, что функция download_file должна вызываться с объектом response в main().Что потребует от меня проверки response объекта на наличие ошибок в main() вместо оболочки.

...