1.1 迭代器

1、可迭代对象:str,list,tuple,set,dict,

迭代器:f(文件),range()

可迭代对象和迭代器都可以for循环

可迭代对象不会计数,

迭代器会计数,上面操作到第3个,则下面的程序继续使用第4个

以上数据类型中都有一个函数__iter__()

所有包含了函数__iter__()的数据类型都是可迭代对象 Iterable

2、 获取迭代器  .__iter__

迭代器往外拿元素 .__next__

lis = [1,2,3,4]

it = lis.__iter__()    #it是迭代器

print(it.__next__())  #打印第一个元素

print(it.__next__())  #打印第二个元素

3、Iterable:可迭代对象  内部包含__iter__()

Iterator:迭代器      内部包含__iter__() 和 __next__

from collections import Iterable    #可迭代的

from collections import Iterator    #迭代器

lis = [1,2,3,4]

isinstence(对象,类型)  #判断对象是否是这个类型

isinstence(lis,Iterable)    #判断是否是可迭代对象

isinstence(lis,Iterator)    #判读是否是迭代器

4、迭代器的特点:

a 节省内存  迭代器是在循环的过程中,每次生成一个

b 惰性机制  迭代器拿值,一定要next

c 只能往前拿,不能往回走

5、模拟for循环

lis = [1,2,3,4]

it = lis.__iter__()

while True:

try:

print(it.__next__())

except StopIteration:

berak

1.2 生成器

1、生成器函数: 只要含有yield关键字的函数都是生成器函数

生成器表达式:(i for i in lis if )

2、生成器特点

生成器中的数据只能取一次,取完就没有了

惰性运算,不找他取值,他就不工作中

for 循环 套生成器表达式,拆开算

3、生成器函数  yield不能和return共用且需要写在函数中

生成器函数,执行后会得到一个生成器作为返回值

def generator():

print(1)

yield ‘a’

print(2)

yield ‘b’

ret = generator()     #ret既是一个迭代器__iter__(),__next__()

print(ret)

print(ret.__next__())  #第一个yield之前的操作

print(ret.__next__())  #第二个yield之前的操作

可以直接用for循环,读取生成器

for i in ret():

print(i)

4、生成器函数 应用,实时读取文件

def tail(filename):
     f = open(filename,encoding="utf-8")
     while True:
         line = f.readline()
         if line.strip():
             yield line.strip()      #生成器

g = tail("file")
for i in g:
     print(i)

5、生成器函数的方法

send 获取到下一个值的效果基本和next一样

只是在获取下一个值的时候,给上一个值的位置传递一个数据

注意事项:第一次使用生成器的时候,必须使用next获取

最后一个yield不能接受外部的值

def generator():
     print(1)
     co = yield       #第一次迭代的时候执行到yield,
    print(co)       #第二次send迭代到第二个yield,且接受了传过来的参数
     print(2)
     yield
g = generator()
g.__next__()
g.send("women")

6、生成器表达式

g = (i for i in range(10))  #g 就是生成器

(元素相关的操作或者某个操作 for 元素 in 可迭代类型)

lis =[1,2,3,5]
s = [print("women") for i in lis]

7、推导式:遍历操作,筛选操作

列表推导式

g = [i for i in range(10)]  #返回的是一个列表

[满足条件的元素相关操作 for 元素 in 可迭代类型 if 元素相关操作]

ret = [i for i in range(30) if i %3 == 0]

print(ret)

字典推导式

例子字典中值和key互换

dic={1:”women”,2:”nen”}

dic_new = {mcase[k]:k for k in dic}

print(dic_new)

集合推导式 去重

最新文章

  1. PHP动态图像的创建要如何实现呢?
  2. php进阶函数
  3. wxpython 基本的控件 (按钮)
  4. 【python】为什么修改全局的dict变量不用global关键字
  5. 【iCore3 双核心板】例程三十:U_DISK_IAP_FPGA实验——更新升级FPGA
  6. java环境变量设定
  7. ubuntu中文版切换为英文后字体变化问题解决
  8. typeof和instanceof 运算符
  9. github过程中收集
  10. HDU - 2502 Subway
  11. 【hexo】如何在一个小时内搭载个人博客
  12. linux系统编程快速定位头文件的技巧之强大的grep命令
  13. js 拼接table 的方法
  14. 下载jQuery EasyUI出现网络问题
  15. js异步
  16. 学习Tensorflow的LSTM的RNN例子
  17. 如何获取Android系统APP的Package Name和Activity Name
  18. [原]关于phycis集成到osgearth的(瞎写写)
  19. Codeforces Round #243 (Div. 2)——Sereja and Swaps
  20. day6 shelve模块

热门文章

  1. opencart中文版checkout设置city和county为非必选
  2. C# XML封装
  3. ABP abp zreo 老版本 支持dotnet framework 4.0
  4. 关于codeforces加载慢
  5. ES6解构赋值常见用法
  6. js 压缩图片(只缩小体积,不更改图片尺寸)
  7. K8S之traefik高级特性
  8. shell三剑客之sed
  9. golang gRPC(持续更新)
  10. php form表单ajax上传图片方法