8、如何实现可迭代对象和迭代器对象 9、如何使用生成器函数实现可迭代对象 10、如何进行反向迭代以及如何实现反向迭代 11、如何对迭代器做切片操作 12、如何在一个for语句中迭代多个可迭代对象
8、如何实现可迭代对象和迭代器对象

PS:注意重载Iterator方法的时候,需要和原来的方法名一样,否则创建实例时会报错
from collections import Iterator,Iterable
import requests,json class WeatherItertor(Iterator):
def __init__(self,city_list):
self.CityList = city_list
self.indexA = 0 def getWeather(self,city):
r = requests.get('http://www.weather.com.cn/data/sk/{code}.html'.format(code=city))
ret = json.loads(r.content.decode("utf-8"))
#风向
WD = ret["weatherinfo"]["WD"]
#城市
city_data = ret["weatherinfo"]["city"]
return "城市:{city},风向:{WD}".format(city=city_data,WD=WD) def __next__(self):
if self.indexA == len(self.CityList):
raise StopIteration
city = self.CityList[self.indexA]
self.indexA += 1
return self.getWeather(city) class WeatherIterable(Iterable):
def __init__(self,city_list):
self.CityList =city_list def __iter__(self):
return WeatherItertor(self.CityList) # citys = {'北京':101010100,'朝阳':101010300,'顺义':101010400,'怀柔':101010500}
citys_list = [101010100,101010300,101010400,101010500]
ret = WeatherIterable(citys_list) for x in ret:
print(x) result:
C:\Python35-32\python.exe C:/laoni/PycharmProjects/TEXT/aa.py
城市:北京,风向:东南风
城市:朝阳,风向:南风
城市:顺义,风向:南风
城市:怀柔,风向:西南风
9、如何使用生成器函数实现可迭代对象

函数里有yield关键是,则是生成器,生成器内置有__iter__方法,只不过调用__iter__返回的是生成器本身,利用这一特性,可以创建一个可迭代对象的类。
class PrimeNum():
def __init__(self,start,end):
self.start = start
self.end = end def aa_bb(self,x):
if x % 2 ==0:
ret = "这是一个偶数:{info}".format(info=x)
elif x % 2 !=0:
ret = "这是一个奇数:{info}".format(info=x)
else:
pass
return ret def __iter__(self):
for x in range(self.start,self.end):
p = self.aa_bb(x)
yield p for x in PrimeNum(1,8):
print(x) result:
这是一个奇数:1
这是一个偶数:2
这是一个奇数:3
这是一个偶数:4
这是一个奇数:5
这是一个偶数:6
这是一个奇数:7
10、如何进行反向迭代以及如何实现反向迭代

正向的可以使用iter函数获取正向的迭代器,reversed函数可以获取反向的迭代器,使用reversed的前提是对象本身具有__reversed__方法
class FloatRange():
def __init__(self,start,end,step=0.2):
self.start =start
self.end = end
self.step = step def __iter__(self):
t = self.start
while t <= self.end:
yield t
t += self.step def __reversed__(self):
t = self.end
while t >= self.start:
yield t
t -= self.step for x in reversed(FloatRange(1,4)):
print(x) 结果:
4
3.8
3.5999999999999996
3.3999999999999995
3.1999999999999993
2.999999999999999
2.799999999999999
2.5999999999999988
2.3999999999999986
2.1999999999999984
1.9999999999999984
1.7999999999999985
1.5999999999999985
1.3999999999999986
1.1999999999999986
11、如何对迭代器做切片操作

通过readlines方法可以获取到,
f = open('H2','r')
print(f)
ret = f.readlines()
print(ret[1:3])
result:
<_io.TextIOWrapper name='H2' mode='r' encoding='cp936'>
[' log 127.0.0.1 local2\n', ' daemon\n']
使用itertools.islice
from itertools import islice
f = open('H2','r')
#获取第10到第20行
info = islice(f,10,20)
print(info)
for x in info:
print(x)
#获取开始到第二十行
info2 = islice(f,30)
#获取第四十行到结尾
info3 = islice(f,40,None)
retsult:
<itertools.islice object at 0x01803F00>
timeout server 50000ms
option dontlognull
listen scats :8888
stats enable
stats uri /admin
stats auth admin:1234
frontend oldboy.org
bind 0.0.0.0:80
option httplog
12、如何在一个for语句中迭代多个可迭代对象

from random import randint
from itertools import chain #并行
Chinese = [randint(40,100) for x in range(10)]
Math = [randint(50,100) for x in range(10)]
English = [randint(60,100) for x in range(10)]
print(Chinese,Math,English)
result = []
for C,M,E in zip(Chinese,Math,English):
ret = C + M + E
result.append(ret) print(result) #串行
class_one = [randint(40,100) for x in range(6)]
class_two = [randint(50,100) for x in range(8)]
class_three = [randint(60,100) for x in range(9)]
chin = 0
for x in chain(class_one,class_two,class_three):
if x >= 90:
chin += 1 print(chin)
8、如何实现可迭代对象和迭代器对象 9、如何使用生成器函数实现可迭代对象 10、如何进行反向迭代以及如何实现反向迭代 11、如何对迭代器做切片操作 12、如何在一个for语句中迭代多个可迭代对象的更多相关文章
- python迭代-如何对迭代器做切片操作
如何对迭代器做切片操作 问题举例 读取某个文件内容的100~300行内容,我们是否可以使用 类似列表切片的方式得到一个100~300行文件内容的生成器 分析 列表的切片操作其实是在重载方法__getI ...
- python迭代-如何在一个for语句中迭代多个可迭代对象
如何在一个for语句中迭代多个可迭代对象 问题举例 (1)某班学生期末考试成绩,语文,数学,英语分别存储在3个列表中,同时迭代三个列表,计算每个学生的总分 (2)某年级有4个班,某次考试每班英语成绩分 ...
- 如何在一个for语句中迭代多个对象(2.7)
如何在一个for语句中迭代多个对象 总结: 并行迭代使用zip(l1, l2, l3) 每次迭代从3个列表里各取一个数据 串行迭代使用itertools.chain(l1, l2, l3) 相当于把3 ...
- 3-6如何在一个for语句中迭代多个可迭代对象
1.并行迭代 迭代元组可以进行拆包迭代. >>> zip([1,2,3,4],('a','b','c','d')) [(1, 'a'), (2, 'b'), (3, 'c'), (4 ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- 理解SQL Server中的权限体系(下)----安全对象和权限
原文:http://www.cnblogs.com/CareySon/archive/2012/04/12/SQL-Security-SecurableAndPermission.html 在开始阅读 ...
- SQL学习笔记四(补充-1-1)之MySQL单表查询补充部分:SQL逻辑查询语句执行顺序
阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SELECT语句关键字的定义顺序 SELE ...
- SQL语句中的select高级用法
#转载请联系 为了更好的了解下面的知识点,我们先创建两张表并插入数据. # 学生表 +----+-----------+------+--------+--------+--------+------ ...
- 如何剔掉 sql 语句中的尾巴,我用 C# 苦思了五种办法
一:背景 1. 讲故事 这几天都在修复bug真的太忙了,期间也遇到了一个挺有趣bug,和大家分享一下,这是一块sql挺复杂的报表相关业务,不知道哪一位大佬在错综复杂的 嵌套 + 平行 if判断中sql ...
随机推荐
- 基于MFC的Media Player播放器的制作(3---功能实现)
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 下面我们试试一下,按下退出Button退出播放器的功能: 首先,我们双击退出Button按钮,就会弹出下图的框: 上面的弄好之后我们就实现 ...
- 神奇,教你用随机数打印hello world
下面是一段随机数程序. public static void main(String[] args) { System.out.println(randomString(-229985452) + & ...
- 数据持久化之轻量级Kv持久化(二)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680本篇文章将继续从以下两个内容来介绍轻量级Kv持久化: [SharedPre ...
- mysql 5.7.20 从frm文件中得到建表语句 (使用 mysql-utilities)
系统环境 centos 7.2 mysql社区版 5.7.20 mysql-utilities 根据官网的说法,截止到2018年5月30日,实用工具的一些功能在Shell的路线图中,鼓励用户迁 ...
- Javascript连续赋值
Javascript对象属于引用类型,将对象赋值给变量相当于将对象地址赋值给变量 let a = {n: 1}; let b = a; a.x = a = {n: 2}; //运算符的优先级 cons ...
- Python-装饰器的进阶 小知识点
⼀. 通⽤装饰器的回顾 开闭原则: 对增加功能开放. 对修改代码封闭 装饰器的作⽤: 在不改变原有代码的基础上给⼀个函数增加功能 通⽤装饰器的写法: def wrapper(fn): def inne ...
- 41-python基础-python3-字符串-转义字符
转义字符包含一个倒斜杠(\),紧跟着是想要添加到字符串中的字符.(尽管它包含两个字符,但大家公认它是一个转义字符.) 实例1: Python 知道,因为 Bob\'s 中的单引号有一个倒斜杠,所以它不 ...
- docker--删除container和image
docker的命令分两类Management Commands和Commands Management Commands是对docker里的对象进行管理的 [root@localhost docker ...
- shell数组变量
- Stm32CubeMX5 创建LED控制工程 - 基于stmf051k8u6
一. 创建一个控制LED的工程 1. 安装好 Stm32CubeMX5 后 打开软件 选择 “ File--> New Project...” 创建一个新工程 2. 之后会出现一个选择芯片的窗 ...