Функция может выполняться после возврата значения?
Итератор передает ключи функции.
если ключ имеется, выводится допустим 1 и возвращается значение
дальше идет код
ОН НЕ В БЛОКЕ ELIF ИЛИ ELSE
он что-то делает. в конце выводит допустим 2
добавляет в словарь ключ и значение.
и выводит новое значение.
Почему-то у меня вывод такой.
1
2
1
2
...
после того как был первый return (там где выводим 1) , разве функция не должна была прерваться?
Важное условие, функции передается один и тот же аргумент
Если мы передали значение другой функции, зачем тогда продолжать выполнять код, если второй return уже выводить некуда?
1Tima1, вот тут вы каждый раз создаёте новый экземпляр класса:
city = CityForecast('Moscow')
И у этого экземпляра атрибут self._city_cache каждый раз пустой.
Поэтому 5 раз отправляется запрос и кеш не работает.
import pprint
import requests
class ApiWeatherForecast:
# Кэш
def __init__(self):
self._city_cache = {}
# получить данные из API
def get(self, city):
if city in self._city_cache:
print('Looking for the city in my cache')
return self._city_cache[city]
url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid=b833e810d4ab6c298dc3b897f77acc23'
data = requests.get(url).json()
forecast1 = str(data['main']['temp_min'])
forecast2 = data['weather'][0]['main']
forecast3 = data['weather'][0]['description']
forecast = forecast2 + " " + " " + forecast1 + " " + forecast3
print('Sending HTTP request')
self._city_cache[city] = forecast
return forecast
class CityForecast:
def __init__(self, city, weather_forecast=None):
self.city = city
self._weather_forecast = weather_forecast or ApiWeatherForecast()
# Обращаемся к методу класса за ифнормацией
def get_forecast(self):
return self._weather_forecast.get(self.city)
def _main():
# имитация 5 запросов для проверки работы с кэшэм
for i in range(5):
city = CityForecast('Moscow')
forecast = city.get_forecast()
pprint.pprint(forecast)
if __name__ == 'main':
_main()
Вывод
Sending HTTP request
'Clouds 287.15 few clouds'
Sending HTTP request
'Clouds 287.15 few clouds'
Sending HTTP request
'Clouds 287.15 few clouds'
Sending HTTP request
'Clouds 287.15 few clouds'
Sending HTTP request
'Clouds 287.15 few clouds'
Ожидаемый вывод
Sending HTTP request
'Clouds 287.15 few clouds'
'Looking for the city in my cache'
'Clouds 287.15 few clouds'
'Looking for the city in my cache'
'Clouds 287.15 few clouds'
'Looking for the city in my cache'
'Clouds 287.15 few clouds'
'Looking for the city in my cache'
Ожидаемый вывод получим только если вставим этот код
Потому что у вас нет кэша, точнее он кадлый раз создается снова в строке city = CityForecast('Moscow')
поместите ее перед циклом и тогда, возможно заработает.