首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 迭代器和生成器

以下为作者学习python时所做的学习笔记,语言上可能不是那么严谨,希望大家多多提交自己的意见,如有错误也请大家能够指出,在此谢谢大家。

一、生成器:具有生成能力,只负责生成

1. 概念引入:同xrang,仅生成,只有在运行时才创建

2. 特点:

a.函数内有yield的函数就是生成器函数

b.执行生成器函数时,只创建生成器,内部代码不执行

c.执行__next__方法,函数内部代码开始执行,至下一个yield中止

d.当函数遇到return时,则整体退出,不再执行之后的代码

3. 代码:

# !usr/bin/env python

# -*- coding:utf-8 -*-

def xrang(): # 生成器函数

print(11)

yield 1

print(22)

yield 2

# return

print(33)

yield 3

r = xrang() # 生成生成器

# 执行函数时

ret = r.__next__() # 执行函数,至yield中止,结果:11

print(ret) # 返回值为yield值,结果:1

ret = r.__next__() # 从上次中止位置开始执行函数,至下一个yield中止,结果:22

print(ret) # 返回值为yield值,结果:2

# 如果加入return,此时会报错,且__next__()方法返回容器的下一个元素,直到结尾抛出StopIteration异常。

ret = r.__next__() # 从上次中止位置开始执行函数,至下一个yield中止,结果:33

print(ret) # 返回值为yield值,结果:3

二、迭代器:具有访问能力,不要求事先准备好整个迭代过程中所有的元素。仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合。对了,作者建了个小群,有兴趣的亲们可以入群一起聊天,学习,交流:145 010 486

二、迭代器:具有访问能力,不要求事先准备好整个迭代过程中所有的元素。仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合。

1. 特点

a.访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容

b.不能随机访问集合中的某个值 ,只能从头到尾依次访问

c.访问到一半时不能往回退

d.便于循环比较大的数据集合,节省内存

2. __next__

见上例

3. for循环:Python将对关键字in后的对象调用iter函数获取迭代器,然后调用迭代器的next方法获取元素,直到抛出StopIteration异常。对迭代器调用iter函数时将返回迭代器自身,所以迭代器也可以用于for语句中,不需要特殊处理。

现在有很多人都想学一点编程,但是直接看教程又有点太难下手。

之前有几个朋友都问我能不能指导他们一下入门学个语言,于是我就弄了个零基础免费学习python的群,每天讲一点点很简单的内容。如果有0基础想入门的新手,不如来跟着看看,欢迎加入我们共同学习的队伍。(145010486)

# !usr/bin/env python

# -*- coding:utf-8 -*-

def rang(n): # 生成器函数

start = 0

while True:

if n

return

yield start

start += 1

for i in rang(10):

print(i)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180105A0IJKJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券