Day 13 迭代器,生成器.
一、迭代器
可以进行for循环的 数据类型
str ,list tuple dict set 文件句柄
什么是可迭代对象?
方法一:dir(被测对象) 如果他含有__iter__,那这个对象就叫做可迭代对象.
s="abcd"
# # l = [1,2,3,4]
# # print("_iter_" in dir(l))#判断是否为迭代对象
#
# # l1=l.__iter__()
# # print(l1)# 将l 列表转换成迭代器
# # #<list_iterator object at 0x0079F9D0>
#
# # print(l1.__next__())
# # print(l1.__next__())
# # print(l1.__next__())
# # print(l1.__next__())#取值.
#
# r=range (100)
# print("_iter_" in dir(r)) # True
#
# r_iter = r.__iter__()
# print(r_iter)#转换成迭代器.
# # s ="abcde"
# print("__iter__" in dir(s))
# print("_iter_" in dir(555))
# 输出结果:
# True
# False # 可迭代对象,iterable 与迭代器有什么关系?
# 可迭代对象--->转换成迭代器
#
# 可迭代对象.__iter__() --->迭代器
s = "abcdefg"
s1 = s.__iter__()
print(s1) # 输出结果:<str_iterator object at 0x0048FAB0> # 迭代器的取值:
# s2 = "abcd"
# s3 =s2.__iter__()
# print(s3.__next__())
# print(s3.__next__())
# print(s3.__next__())
# print(s3.__next__())
# print("__iter__" in dir(s2))
# print("__iter__" in dir(s3))
# print("__iter__" in dir(s3))
# print("__iter__" in dir(s3)) # 输出结果:
# <str_iterator object at 0x0205C910>
# a
# b
# c
# d
# True
# True
# True
# True # 只含有__iter__方法的数据是可迭代对象.
#含有__iter__方法,并且含有__next__方法的数据是迭代器. # l=[1,2,3,4,5]
# print("__iter__"in dir(l))##判断是否为迭代对象
# print("__next__" in dir(l))
# liter= l.__iter__()
# print(liter.__next__())
# print(liter.__next__())
# print(liter.__next__())
# print(liter.__next__())
# 输出结果
# <str_iterator object at 0x0021FAB0>
# True
# False
# 1
# 2
# 3
# 4
#方法一:dir(被测对象)如果他含有__iter__,那么这个对象就叫做可迭代对象.
l = [1,2,3]
l_iter = l.__iter__()
from collections import Iterable
from collections import Iterator
print(isinstance(l,Iterable))
print(isinstance(l,Iterator))
print(isinstance(l_iter,Iterator))
print(isinstance(l,list)) # 输出结果:
# <str_iterator object at 0x005DC910>
# True
# False
# 1
# 2
# 3
# 4
# True
# False
# True
# True # 迭代器的意义?
# 1. 迭代器节省内存。
# 2. 迭代器惰性机制。
# 3. 迭代器不能反复,一直向下执行。 '''
# for 循环机制:
# 内部还有__iter__方法,if __name__ == '__main__':
# 他会将可迭代对象先转换成迭代器然后在调用__next__方法.
他有异常处理的方法.
'''
for i in [1,2,3]:
print(i) l =[1,2,3]
l_iter=l.__iter__()
while True :
try :
print(l_iter.__next__())
except StopIteration:
break
print("__iter__" in dir(range (10)))
print("__next__" in dir(range(10)))
# 输出结果:
# True
# False 二、生成器
'''
什么是生成器
生成器的本质就是迭代器 ,生成器是自己用python代码写的迭代器
1. 可以用生成器函数.
2. 可以用各种推倒式构建迭代器.
3.可以通过数据转换.
'''
def func():
print(111)
return 222
ret= func()
print(ret) #生成器函数 生成器 .
def gener():
print("aaa")
yield 222
print("bbb")
yield 333
print("ccc")
g =gener()
print(g)
print(g.__next__())
print(g.__next__())
# return 返回给调用者值,并结束此函数.
#yiled 返回给调用者值,并将指针停留在当前位置.
#返回结果.
# <generator object gener at 0x022A5780>
# aaa
# 222
# bbb
# 333 def cloth():
for i in range(10000):
print("衣服%s"%i) cloth()
g_cloth =cloth()
print(g_cloth._next_())
print(g_cloth._next_())
for i in range (50):
print(g_cloth._next_())
for i in range (50):
print(g_cloth._next_()) #send
# 1,send 和next功能一样
# 2, 给上一个yiled 整体发送一个值
# send不能给最后一个yield发送值
# 获取第一个值的时候,不能用send 只能用next
# def gener():
# yield 222
# count = yield 333
# print('-------->',count)
# yield 'aaa'
# yield 'bbb'
# g = gener()
# print(g.send('AAA'))
# print(g.send(None))
# print(g.send('AAAA'))
# print(g.send('wwwwww'))
Day 13 迭代器,生成器.的更多相关文章
- Day 13迭代器生成器
迭代器 1.迭代器就是迭代的工具,迭代也可以说成是重复,并且每一次重复都是基于上一次的结果而来的,在python中一切皆对象. 2.可迭代对象:只要拥有__iter__方法的对象都是可迭代对象. 3. ...
- Python 迭代器&生成器
1.内置参数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice ...
- python杂记-4(迭代器&生成器)
#!/usr/bin/env python# -*- coding: utf-8 -*-#1.迭代器&生成器#生成器#正确的方法是使用for循环,因为generator也是可迭代对象:g = ...
- Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式
目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...
- python 迭代器 生成器
迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...
- Python基础-迭代器&生成器&装饰器
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 我现在有个需求,看 ...
- 迭代器/生成器/装饰器 /Json & pickle 数据序列化
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
- Learn day5 迭代器\生成器\高阶函数\推导式\内置函数\模块(math.time)
1.迭代器 # ### 迭代器 """能被next调用,并不断返回下一个值的对象""" """ 特征:迭代器会 ...
- Python装饰器、迭代器&生成器、re正则表达式、字符串格式化
Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用 ...
随机推荐
- Golang之定义错误(errors)
基本示例: package main //定义错误 //error 也是个接口 import ( "errors" "fmt" ) var errNotFoun ...
- 注册带有Portal功能的DYN365_ENTERPRISE_PLAN1地址
使用官方进入的注册页面注册后试用,发现没有Portal功能. https://trials.dynamics.com/Dynamics365/Signup 使用以下的地址注册可以产生Portal ht ...
- Ubuntu部分命令的使用简介
1.查看USB设备 lsusb #查看系统中的usb设备 lsusb –v #查看详细的usb设备信息 2.ubuntu mount u盘 第一步:查看U盘信息 sudo fdisk -l 得到类似 ...
- Web前端工程师常去的15个技术网站
1.CSDN 网址:https://www.csdn.net/ 简介: CSDN (Chinese Software Developer Network) 创立于1999年,是中国最大的IT社区和服务 ...
- action spring 注入错误,如果检查各项注入都没有错误时,考虑struts 是否配置了namespace(如果你有多个namespace="/")
[ERROR] 2015-01-04 09:42:35,180 (CommonsLogger.java:38) - Exception occurred during processing reque ...
- Java 中>>和>>>的区别
Java 中>>和>>>的区别 Java中的位运算符: >>表示右移,如果该数为正,则高位补0,若为负数,则高位补1: >>>表示无符号右移 ...
- php连接mssql
首先修改php.ini,将下行的前的分号去掉. extension=php_mssql.dll 由于本机没有安装客户端,所以要将ntwdblib.dll复制到C:\WINDOWS\system32目录 ...
- Oracle连接字符串大全
// 在 C# 代码中用以下数据库提供程序访问 Oracle 数据库 // Oracle Data Provider for .NET / ODP.NET 使用 TNS 写法 Data Source= ...
- 2018.09.23 atcoder Boxes and Candies(贪心)
传送门 一道挺有意思的贪心. 从1到n依次满足条件. 注意要特判第一个数已经大于x的情况. 但是如何贪心吃呢? 如果靠左的数没有越界,我们吃靠右的数. 原因是下一次靠右的数就会成为靠左的数,相当于多贡 ...
- 42 Can stress be Avoided ? 压力能够回避吗 ?
Can stress be Avoided ? 压力能够回避吗 ? ①In the 1960s, medical researchers Thomas Holmes and Richard Rahe ...