博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
廖---高级特性 生成器 迭代器
阅读量:4594 次
发布时间:2019-06-09

本文共 1623 字,大约阅读时间需要 5 分钟。

生成器

在python中,一边循环一边计算的机制,称为生成器:generator。它保存的是算法。

# 创建generator方法1:将列表生成式的[] 改为 ()>>> g = (x * x for x in range(10))>>> g
at 0x1022ef630>#为了将结果快速显示出来,可以转化为列表>>>list(g)[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 创建方法2: 通过函数实现,例:Fibonacci数列。def fib(max): n, a, b = 0, 0, 1 while n < max: yield b # 关键字是 yield a, b = b, a + b n = n+ 1 return 'done'

generator 与 函数 的执行流程不同。函数顺序执行,遇到 return 或是运行到最后一行语句,就会返回。 genrator在每次调用 next()的时候执行,再次执行时从上次返回的yield 处继续执行。例:

def odd():    print('step 1')    yield (1)    print('step 2')    yield(2)    print('step 3')    yield(3)>>> o = odd();>>> next(o)step 11>>> next(o)step 23>>> next(o)step 35>>> next(o)Traceback (most recent call last):  File "
", line 1, in
StopIteration

由上可知,next()函数一直执行到抛出 StopIteration异常为止。

获取 generator的值, 因其是可以迭代的,所以可以用 for循环。

g = fib(6)while True:    try:        x = next(g)        print('g:', x)    except StopIteration as e:        print('Generator return value:', e.value)        break  g: 1g: 1g: 2g: 3g: 5g: 8Generator return value: done

迭代器

区分: 可迭代对象:Iterable 与 迭代器 Iterator

  1. 可以直接作用于 for 循环的对象,统称为 可迭代对象:Iterable。判断方法:
>>>from collections import Iterable>>>isinstance([], Iterable)True>>>isinstance(100, Iterable)False

基本集合数据类型: list、tuple、dict、set、strgenerator

  1. 可以被next()函数调用并不断返回下一个值的对象称为 迭代器: Iterator。判断方法:
>>>from collection import Iterator>>>isinstance ((x for x in range(10), Iterator)True>>>isinstance([], Iterator)False

list、tuple、dict、set、str 此类转为 Iterator需要使用iter()函数

>>>isinstance(iter([]), Iterator)True

转载于:https://www.cnblogs.com/qev211/p/7500962.html

你可能感兴趣的文章
win10用filezilla server搭建ftp服务器一直无法访问
查看>>
字符串算法(KMP,Trie树,AC自动机)
查看>>
Oracle PL/SQL编程之过程
查看>>
Spring(三)--Spring bean的生命周期
查看>>
TextClock的基本使用
查看>>
.NET技术
查看>>
listview图片错位
查看>>
Python-hashlib模块
查看>>
SP348 EXPEDI - Expedition
查看>>
全栈工程师之路——服务器端自动部署
查看>>
SequoiaDB 系列之七 :源码分析之catalog节点
查看>>
javascript高级函数
查看>>
scrollTop是什么及用法说明
查看>>
Solr集群的搭建
查看>>
【动态树】uva11994 Happy Painting!
查看>>
C# WinForm 文件上传下载
查看>>
ASP.NET MVC3 快速入门-第三节 添加一个视图
查看>>
【linux C】C语言中常用的几个函数的总结【三】
查看>>
一些使用Android设备调试功能的注意事项(挖职位)
查看>>
花指令
查看>>