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 ...
随机推荐
- git for windows 2.1版本git bash下git log乱码修复
git bash,输入以下命令git config --global i18n.logoutputencoding utf-8git config quotepath false关闭git bash, ...
- Spring Enable高级应用及原理
Enable* 之前的文章用到了一些Enable*开头的注解,比如EnableAsync.EnableScheduling.EnableAspectJAutoProxy.EnableCaching等, ...
- Scrapy框架: middlewares.py设置
# -*- coding: utf-8 -*- # Define here the models for your spider middleware # # See documentation in ...
- android 拖拉和放大
public class MainActivity extends Activity { private ImageView imageView; @Override public void onCr ...
- Invoke-Obfuscation混淆ps文件绕过Windows_Defender
前提 powershell只能针对win7之后的系统,之前的win操作系统默认没有安装powershell. 所在目录:C:\Windows\System32\WindowsPowerShell\v1 ...
- C#5.0 异步编程 Async和Await--理解异步方法与线程之间的关系
这次来理解一下异步方法与线程之间的关系 新建一个控制台程序 代码如下 static void Main(string[] args) { Console.WriteLine("\n进入Mai ...
- RK3288 android切换耳麦通道
通过耳机状态切换耳机mic与板子麦/work/rk3288/firefly-rk3288_android5.1_git_20180126/kernel/sound/soc/codecs/es8323. ...
- kernel: possible SYN flooding on port 80. Sending cookies
1. sysctl -w net.ipv4.tcp_syncookies=1 #启用使用syncookiessysctl -w net.ipv4.tcp_synack_retries=1 #降低syn ...
- 文件对比工具 diff cmp patch(没弄完) pr
diff不仅可以对比文件,而且可以对比文件夹中的文件. 解析: diff用在比对两个文件的差异,并且是以行为单位进行对比.一般用在ascii纯文本档的对比上. 例 在tmp中创建一个testpw文件夹 ...
- nginx获取头部信息带下划线,获取不到解决方案
nginx获取头部信息带下划线,获取不到解决方案 解决方案: 修改配置文件,进行添加信息如下: underscores_in_headers on; 然后进行重新加载: [root@qa-web co ...