Python3基础笔记_迭代器
# Python3 迭代器与生成器
import sys ''' 迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。(迭代器只能往前不会后退)。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器: '''
list = [1, 2, 3, 4]
it = iter(list) # 创建迭代器对象
print(next(it)) list2 = [1, 2, 3, 4]
it2 = iter(list2)
for x in it2:
print(x, end=" ") # 1 2 3 4 # 引入 sys 模块
list3 = [1, 2, 3, 4]
it3 = iter(list3) # 创建迭代器对象
print()
while True:
try:
print(next(it3))
except StopIteration:
sys.exit() import sys # 创建一个迭代器
'''
把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。
类都有一个构造函数,Python 的构造函数为 __init__(), 它会在对象初始化的时候执行
__iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成
__next__() 方法(Python 2 里是 next())会返回下一个迭代器对象。
''' class MyNumbers:
def __iter__(self):
self.a = 1
return self def __next__(self):
x = self.a
self.a += 1
return x myclass = MyNumbers() myiter = iter(myclass)
print("------------------")
print(myiter.__next__())
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter)) # StopIteration 异常
'''
StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,
在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代
''' class MyNumbers1:
def __iter__(self):
self.a = 1
return self def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration myclass1 = MyNumbers1()
myiter1 = iter(myclass1)
print("------------111--------")
for x1 in myiter1:
print(x1) # 生成器
'''
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,
-------更简单点理解生成器就是一个迭代器。-------
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象 ''' def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a # 这里将数放到迭代器中,从0开始
a, b = b, a + b
counter += 1 f = fibonacci(10) # f 是一个迭代器,由生成器返回生成 print("-----斐波那契------")
while True:
try:
print(next(f), end=" ")
except StopIteration:
sys.exit() # -->0 1 1 2 3 5 8 13 21 34 55
Python3基础笔记_迭代器的更多相关文章
- Python3基础笔记_字典
# Python3 字典 dict = {'} # 1.访问字典里的值 ,字典中没有key会报错 # 2.修改字典 print("修改之前:", dict['Beth']) dic ...
- Python3基础笔记_元组
# Python3 元组 ''' Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运 ...
- Python3基础笔记_列表
# Python 列表(List) list1 = ['physics', 'chemistry', 1997, 2000] list2 = [1, 2, 3, 4, 5] list3 = [&quo ...
- Python3基础笔记_字符串类型
# 1.Python转义字符 a = "sqwerdf" # 2.Python字符串运算符 ''' + 字符串连接 a + b 输出结果: HelloPython * 重复输出字符 ...
- Python3基础笔记--基础知识
目录: 一.变量问题 二.运算符总结 三.字符串问题 四.数据结构 五.文件操作 一.变量问题 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.它自始至终都是在内存中活动,只有指明 ...
- python3学习笔记10(迭代器和生成器)
参考http://www.runoob.com/python3/python3-iterator-generator.html 迭代器 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束 ...
- Python3基础笔记--生成器
目录: 一.列表生成器 二.生成器 三.迭代器 一.列表生成器 a = [x for x in range(10)] b= [y*2 for y in range(10)] def f(n) retu ...
- Python基础笔记_变量类型
下面是W3C学习笔记 , , ) :] ]) :]) :]) :-]) :-]) ]) :]) :]) ) , , ]) :]) :]) ) , , , ]) :]) :]) ) ] = , ])) ...
- Python3基础笔记---面向对象
只是对一些新的知识的记录 1.创建类 class ClassName: <statement-1> . . . <statement-N> 类实例化后,可以使用其属性,实际上, ...
随机推荐
- Redis消息订阅与发布
监听器的创建 package com.sogou.baike.testimport.testSubscribe; import redis.clients.jedis.JedisPubSub; pub ...
- .Net Core 部署之一 《CentOS 从GitHub/Gitee 等源代码网站部署Web网站》
先看下楼主从某阿打折购买的渣渣服务器 lsb_release -a 一.安装dotnet-SDK 注册微软的服务 sudo rpm -Uvh https://packages.microsoft.co ...
- git学习记录1(本地库管理)
学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...
- Git 学习(一)安装 Git
这里写自定义目录标题 这一章介绍怎么安装 Git 大家都是开发老司机,就不简介什么是 Git 了,直接开花. 在 Linux 上安装Git 在 Windows 上安装 Git 初次使用 Git 前的配 ...
- 普通用户授予root权限
开始用linux的时候会遇到用户权限问题,比如安装软件的时候经常会提示权限不足,下面介绍给普通用户授予root权限. 找到 cd /etc/sudoers可以看到用户的权限是:只有读取的权限(以下操 ...
- 【洛谷】P1962
题目链接:https://www.luogu.org/problemnew/show/P1962 题意:求fib数列的第n项,很大.mod 1e9+7. 题解:BM直接推. 代码: #include ...
- EXE 和 SYS 信息交互
操了,分发函数少发一个,让我白调了两个多小时.
- 003-JavaString数据类型
String类型可以和8中基本数据类型做运算(byte/short/char/int/long/float/double/boolean),且只能是连接运算 1. 区分 连接符 和 “+” 的区别 c ...
- GetOpenFilename的基本用法
GetOpenFilename '一.概述基本语法 Application.GetOpenFilename 方法 显示标准的“打开”对话框,并获取用户文件名,而不必真正打开任何文件,只是把打开文件名称 ...
- C#让两个长度相同的数组一一对应
比如: string a[]={"x","y","z"} "} 用字典使其一一对应 Dictionary<string, s ...