Python迭代器、生成器
迭代器 iterator
# 只要是能被for循环的数据类型 就一定拥有__iter__方法
# 迭代器多了的方法
print(set(dir([].__iter__()))-set(dir([])))
print([1,2,'s'].__iter__().__length_hint__()) # 元素个数
print(l.__iter__().__next__()) # 一个个的取值
# 迭代器协议 -- 内部含有__next__()和__iter__()两个方法
# 可迭代协议 -- 只要含有__iter__()就是可迭代的
# 一个可迭代类型执行了__iter__()之后的返回值就是一个迭代器
from collections.abc import Iterable
from collections.abc import Iterator
print(isinstance([],Iterable))
print(isinstance([],Iterator))
生成器 generator
生成器函数
1、Send
def generator1():
print(123)
content = yield 'a'
print(content)
print(456)
yield 'b'
g = generator1()
print(g.__next__())
# send 获取下一个值的效果与next相同
# 在获取下一个值的时候 可以给上一yield的位置传递一个数据
print(g.send('Hello'), '\n')
2、装饰器和生成器
def mynext(func):
def inner(*args, **kwargs):
g1 = func(*args, **kwargs) # g1=average()
g1.__next__()
return g1
return inner
@mynext
def average():
sum = 0
count = 0
avg = 0
while True:
num = yield avg
sum += num
count += 1
avg = sum/count
g2 = average()
print(g2.send(10))
print(g2.send(20), '\n')
3、yield from
def gen():
a = 'abcdefg'
b = '123456'
yield from a
yield from b
# 相当于
# for i in a:
# yield i
g3 = gen()
for i in g3:
print(i)
生成器表达式
1、列表推导式
egg_list=['鸡蛋%s'%i for i in range(10)]
# egg_list=[i for i in range(10)]
# 相当于
# egg_list=[]
# for i in range(10):
# egg_list.append('鸡蛋%s'%i)
print(egg_list)
2、生成器表达式
g=(i for i in range(10))
print(g)
print(g.__next__())
Python迭代器、生成器的更多相关文章
- Python迭代器生成器与生成式
Python迭代器生成器与生成式 什么是迭代 迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果.每一次对过程的重复称为一次"迭代",而每一次迭代得到的结果会作为下一次迭 ...
- Python 迭代器&生成器
1.内置参数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice ...
- python 迭代器 生成器
迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...
- Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- python迭代器,生成器,推导式
可迭代对象 字面意思分析:可以重复的迭代的实实在在的东西. list,dict(keys(),values(),items()),tuple,str,set,range, 文件句柄(待定) 专业角度: ...
- 4.python迭代器生成器装饰器
容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元素存储在内存中 ...
- python迭代器生成器
1.生成器和迭代器.含有yield的特殊函数为生成器.可以被for循环的称之为可以迭代的.而可以通过_next()_调用,并且可以不断返回值的称之为迭代器 2.yield简单的生成器 #迭代器简单的使 ...
- Python迭代器生成器,私有变量及列表字典集合推导式(二)
1 python自省机制 这个是python一大特性,自省就是面向对象的语言所写的程序在运行时,能知道对象的类型,换句话说就是在运行时能获取对象的类型,比如通过 type(),dir(),getatt ...
- Python迭代器生成器,模块和包
1.迭代器和生成器 2.模块和包 1.迭代器 迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和__next__()方法. 其中__it ...
- python迭代器生成器-迭代器和list区别
迭代 生成 for循环遍历的原理 for循环遍历的原理就是迭代,in后面必须是可迭代对象 为什么要有迭代器 对于序列类型:字符串.列表.元组,我们可以使用索引的方式迭代取出其包含的元素.但对于字典.集 ...
随机推荐
- JAVA反射优化
****************** 转自 https://my.oschina.net/19921228/blog/3042643 *********************** 比较反射与正常实例 ...
- js 时间格式,加减
Date.prototype.Format = function (fmt) { //author: rixiao var o = { "M+": this.getMonth() ...
- package---包
一,包 包(package) 用于管理程序中的类,主要用于解决类的同名问题.包可以看成目录. 包的作用: [1] 防止命名冲突. [2] 允许类组成一个单元(模块),便于管理和维护 [3] 更好的保护 ...
- Linux下MySql的登陆和管理操作
一.mysql数据库启停1.linux下启动mysql的命令: mysqladmin start/ect/init.d/mysql start (前面为mysql的安装路径)2.linux下重启 ...
- 【CF715E】Complete the Permutations 第一类斯特林数
题目大意 有两个排列 \(p,q\),其中有一些位置是空的. 你要补全这两个排列. 定义 \(s(p,q)\) 为 每次交换 \(p\) 中的两个数,让 \(p=q\) 的最小操作次数. 求 \(s( ...
- P1177 【模板】快速排序(学完归并和堆排之后的二更)
P1177 [模板]快速排序 不用说,连题目上都标了是一道模板,那今天就来对能用到的许多排序方式进行一个总结: 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理 ...
- windows下提权基础
拿到webshell很多时候代表渗透的开始,下面带来windows提权基础 环境:虚拟机 win7系统 首先:查看权限whoami 我们知道windows的高权限应该是administrator和sy ...
- 第一篇-生成可运行得exe文件
1. 项目 --> 属性 2. 配置 -->Release 3. 如果可以在其他电脑运行可以不进行下面的,如果不能运行,选择代码生成-->运行库-->MT 4. 完成上述步骤后 ...
- python第十天
函数 1.函数:完成特定功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数 在现实中,很多问题要通过一些工具进行处理==>可以将工具提前生产出来,并命名==>通过名字就可以找 ...
- 自定义element-ui中的图标
element-ui图标库图标较少,比如有关于登录页面输入框里的用户名和密码的小图标就没有,这个时候可以自定义图标. <el-input v-model="loginForm.user ...