Эффективное извлечение данных из генератора - PullRequest
0 голосов
/ 06 января 2019

Я только изучаю python, и мне интересно, есть ли лучший способ извлечь самую текущую температуру из переменной res.

from noaa_sdk import noaa
from datetime import datetime
date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
n = noaa.NOAA()
res = n.get_observations('25311', 'US', start=date, end=None, num_of_stations=1)
temp= (next(res))
value =(temp.get('temperature'))
temperature = (value['value'])
temperature = temperature*9/5+32
print(temperature, ' F')

Ответы [ 3 ]

0 голосов
/ 06 января 2019

Ваш код достаточно эффективен, но его можно сократить до:

Код:

from noaa_sdk import noaa
import datetime as dt

date = dt.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
res = noaa.NOAA().get_observations('25311', 'US', start=date)
print('{:.1f} F'.format( next(res)['temperature']['value'] * 9 / 5 + 32))

Результаты:

44.1 F
0 голосов
/ 06 января 2019

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

from datetime import datetime

from noaa_sdk import noaa

def to_freedom_degrees(temp_c):
    return 32.0 + 9.0 / 5.0 * temp_c

date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
observations = noaa.NOAA().get_observations('25311', 'US', start=date, end=None, num_of_stations=1)

for observation in observations:
    temp_c = observation['temperature']
    temp_f = to_freedom_degrees(temp_c)
    print(temperature, ' F')
    # I only want one temperature
    break
else:
    print('No temperature found!')
0 голосов
/ 06 января 2019

Если вы имели в виду вычислительную эффективность, то не так много возможностей для ее повышения.

Если вы имели в виду более короткие строки кода, то часть temp= (next(res)), которая имеет отношение к извлечению данных из вашего кода, кажется уже очень короткой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...