python's thirteenth day for me 迭代器 生成器
迭代器:
for 循环可以循环的就是可迭代对象。
可迭代对象:str, list, tuple, dict, set, range。
迭代器:f1文件句柄。
可迭代协议:
可以被迭代要满足的要求就叫做可迭代协议。可迭代协议的定义非常简单,就是内部实现了__iter__方法。
可迭代对象:
内部含有__iter__方法的对象就叫做可迭代对象。
如何判断:两种方式:
s = 'guqingqiu'
# print(dir(s))
print('__iter__' in dir(s)) # True
from collections import Iterable
print(isinstance(s,Iterable)) # True
将可迭代对象转化成迭代器: 可迭代对象.__iter__() ---->迭代器
迭代器不仅含有__iter__,还含有__next__。遵循迭代器协议。
s = 'guqingqiu'
l_s = s.__iter__() #将 s 转化成迭代器
print('__iter__' in dir(l_s)) # True
print('__next__' in dir(s)) # False
print('__next__' in dir(l_s)) # True
迭代器的好处:
1,节省内存空间。
2,满足惰性机制。
3,不能反复取值,不可逆。
l = [1,2,3,4,5]
for i in l:
print(i)
# 1,将可迭代对象转化成迭代器。
# 2,内部使用__next__方法取值。
# 3,运用了异常处理去处理报错。
while 循环 模仿 for 循环内部机制:
l = [1,2,3,4,5]
l_obj = l.__iter__() #将列表转化成迭代器
while True:
try:
i = l_obj.__next__() #__next__用法:惰性打印迭代器里的值
print(i)
except StopIteration: # 不写默认是:Exception(可忽略所有报错),忽略StopIteration错误
break # 跳出循环
生成器:
def func():
print(111)
print(222)
yield 333
print(444)
yield 555
g = func()
g.__next__() #将生成器内的值第一个 yield 以上的打印
g.__next__() # 将生成器 第一个 yield下 第二个 yield 以上的打印出来。 #
#
#
1,函数中只要有 yield 那她就不是一个函数,而是一个生成器。
2,g 称作生成器对象。
send 用法:
def generator():
print(123)
content = yield 1
print('yield 1:',content) # yield 1: hello
print(456)
yield 2
g = generator()
g.__next__() #
g.send('hello') # 456 #send 的效果和next一样。 # send 获取下一个值得效果和 __next__基本一致。
# 只是在获取下一个值的时候,给上一个 yield 的位置传递一个数据。
# 使用 send 的注意事项:
# 第一次使用生成器的时候 使用 __next__获取下一个值。
# 最后一个 yield 不能接受外部的值。
python's thirteenth day for me 迭代器 生成器的更多相关文章
- python 全栈开发,Day13(迭代器,生成器)
一.迭代器 python 一切皆对象 能被for循环的对象就是可迭代对象 可迭代对象: str,list,tuple,dict,set,range 迭代器: f1文件句柄 dir打印该对象的所有操作方 ...
- 【Python】【容器 | 迭代对象 | 迭代器 | 生成器 | 生成器表达式 | 协程 | 期物 | 任务】
Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyn ...
- python笔记3 闭包 装饰器 迭代器 生成器 内置函数 初识递归 列表推导式 字典推导式
闭包 1, 闭包是嵌套在函数中的 2, 闭包是内层函数对外层函数的变量(非全局变量)的引用(改变) 3,闭包需要将其作为一个对象返回,而且必须逐层返回,直至最外层函数的返回值 闭包例子: def a1 ...
- Python基础_可迭代的/迭代器/生成器
介绍 可迭代的:内部实现了__iter__方法 迭代器:内部实现了__iter__,__next__方法 生成器:yield,yield from 使用 __iter__() __next__() _ ...
- 可迭代对象&迭代器&生成器
在python中,可迭代对象&迭代器&生成器的关系如下图: 即:生成器是一种特殊的迭代器,迭代器是一种特殊的可迭代对象. 可迭代对象 如上图,这里x是一个列表(可迭代对象),其实正如第 ...
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- 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.实现加减成熟及 ...
随机推荐
- 解决:actual_tessdata_num_entries_ <= TESSDATA_NUM_ENTRIES:Error:Assert failed:in file ..\..\ccutil\tessdatamanager.cp p, line 50
在玩tesseract时,发现如下报错: 这个是因为Tesseract-OCR的版本和chi_sim.traindata字库版本不匹配,由于我的Tesseract-OCR是3.02.02,去googl ...
- 51nod 1154 dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1154 1154 回文串划分 基准时间限制:1 秒 空间限制:131072 ...
- ionic2——开发利器之Visual Studio Code 常用插件整理
1.VsCode官方插件地址: http://code.visualstudio.com/docs 2.使用方法,可以在官网中搜索需要的插件或者在VsCode的“”扩展“”中搜索需要的插件 添加方法使 ...
- Android下利用RadioGroup和RadioButton实现Tabbar的效果
本实现方法主要使用RadioGroup和RadioButton的组合方式来实现Tabbar的效果. 其中选中的Tab的切换的动作可以通过RadioGroup的OnCheckedChangeListen ...
- Leetcode 1005. Maximize Sum Of Array After K Negations
class Solution(object): def largestSumAfterKNegations(self, A, K): """ :type A: List[ ...
- 牛客国庆集训派对Day1:J:Princess Principal(栈模拟求括号匹配)
题目描述 阿尔比恩王国(the Albion Kingdom)潜伏着一群代号“白鸽队(Team White Pigeon)”的间谍.在没有任务的时候,她们会进行各种各样的训练,比如快速判断一个文档有没 ...
- bzoj 3052 糖果公园
Written with StackEdit. Description \(Candyland\) 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的 ...
- VSCode高效开发插件
VSCode 必装的 10 个高效开发插件 https://www.cnblogs.com/parry/p/vscode_top_ten_plugins.html 本文介绍了目前前端开发最受欢迎的开发 ...
- Python学习-数据运算
在Python中有丰富的算术运算,这使得Python在科学计算领域有着很高的地位,Python可以提供包括四则运算在内的各种算术运算. a = 10 b = 20 print(a-b) #-10 pr ...
- Struts2 级联下拉框 详解析
目录(?)[+] 运行环境:myeclipse8.6+jboss5.1+jvm1.6 先看最后目录结构: 直接上源码: complexFormTag.jsp: <%@ page language ...