您的位置:首页 > 编程语言 > Python开发

[Python高效编程] - 获取天气信息并使用迭代for输出

2017-11-23 20:54 866 查看

开发环境

Python版本: python3.6

调试工具:pycharm 2017.1.3

电脑系统:Windows 10 64位系统

Python库:requests,collections

获取天气信息

import requests

def getWeather(city):
r = requests.get("http://wthrcdn.etouch.cn/weather_mini?city=" + city)
data = r.json()['data']['forecast'][0]
return '{0}: {1}, {2}'.format(city, data['low'], data['high'])

print(getWeather('武汉'))


武汉: 低温 4℃, 高温 15℃


使用可迭代对象和迭代器输出信息

from collections import Iterable, Iterator

import requests

class WeatherIterator(Iterator):
# 继承可迭代的对象
def __init__(self, cities):
self.cities = cities
self.index = 0

def getWeather(self, city):
r = requests.get("http://wthrcdn.etouch.cn/weather_mini?city=" + city)
data = r.json()['data']['forecast'][0]
return '{0}: {1}, {2}'.format(city, data['low'], data['high'])

def __next__(self):
if self.index == len(self.cities):
raise StopIteration
city = self.cities[self.index]
self.index += 1
return self.getWeather(city)

class WeatherIterable(Iterable):
# 继承迭代器
def __init__(self, cities):
self.cities = cities

def __iter__(self):
return WeatherIterator(self.cities)

for x in WeatherIterable(['北京', '上海', '武汉', '深圳']):
print(x)


北京: 低温 -4℃, 高温 7℃
上海: 低温 5℃, 高温 13℃
武汉: 低温 4℃, 高温 15℃
深圳: 低温 13℃, 高温 19℃


代码优化

上述的代码还是不够简洁,还可以进一步优化,下面重写代码

import requests

class WeatherOutput:
"""输出天气信息"""
def __init__(self, cities):
self.cities = cities
self.index = 0

def getWeather(self, city):
try:
r = requests.get("http://wthrcdn.etouch.cn/weather_mini?city=" + city)
data = r.json()['data']['forecast'][0]
return '{0}: {1}, {2}'.format(city, data['low'], data['high'])
except:
print("获取天气信息失败")

def __iter__(self):
return self

def __next__(self):
if self.index == len(self.cities):
raise StopIteration
city = self.cities[self.index]
self.index += 1
return self.getWeather(city)

for x in WeatherOutput(['北京', '上海', '武汉', '深圳']):
print(x)


北京: 低温 -4℃, 高温 7℃
上海: 低温 8℃, 高温 14℃
武汉: 低温 4℃, 高温 17℃
深圳: 低温 15℃, 高温 19℃


如果想知道原理,可以参考这篇博客:

http://blog.csdn.net/lanhaixuanvv/article/details/78503325
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 迭代