Присвойте несколько вызовов одной переменной или это не имеет значения для производительности - PullRequest
1 голос
/ 04 марта 2020

Пример № 1:

import requests

r_get_obj = requests.get('http://localhost')
r__get__content = r_get_obj.text

if 'junior' in r__get__content:
   print('junior')
elif 'egg' in r__get__content:
   print('egg')
else:
   print('none')

Пример № 2:

import requests

r_get_obj = requests.get('http://localhost')

if 'junior' in r_get_obj.text:
   print('junior')
elif 'egg' in r_get_obj.text:
   print('egg')
else:
   print('none')

Как видите, пример 1 назначает содержимое запроса переменной затем используйте его для проверки,

Но пример 2 не присваивает ее переменной, но продолжает вызывать r_get_obj.text.

Мой вопрос: 2-й один имеет плохое влияние на производительность / плохой неочищенный код, а какой предпочтительнее?

1 Ответ

1 голос
/ 04 марта 2020

Вы можете сделать быстрое погружение и исследовать библиотеку requests, чтобы прийти к заключению о том, что вам следует делать. Обратите внимание на следующее:

resp = requests.get("http://google.com")
type(resp)

Выходы:

<class 'requests.models.Response'>

Зайдя в этот класс в своем репо (requests/models.py), вы в конечном итоге получите определение класса под названием Response:

class Response(object):
    """The :class:`Response <Response>` object, which contains a
    server's response to an HTTP request.
    """

...

При прокрутке вниз вы увидите метод свойства с именем text, который вы вызываете:

...

    @property
    def text(self):
        """Content of the response, in unicode.
        If Response.encoding is None, encoding will be guessed using
        ``chardet``.
        The encoding of the response content is determined based solely on HTTP
        headers, following RFC 2616 to the letter. If you can take advantage of
        non-HTTP knowledge to make a better guess at the encoding, you should
        set ``r.encoding`` appropriately before accessing this property.
        """

...

Этот метод выполняет некоторое кодирование, прежде чем каждый раз возвращает возвращаемую (и ожидаемую) переменную text; то есть он делает без кэширования . В этом случае, скорее всего, лучше просто кешировать его самостоятельно и не беспокоиться о проблемах с производительностью:

resp = requests.get("http://google.com")
html = resp.text
...