可迭代协议:

内部含有__iter__方法的值/变量都是可迭代的.可迭代类型和python语言之间的协议.

可迭代对象:

iterable,内部包含__iter__()函数.

迭代器:

iterator,内部同时包含__iter__()和__next__().

迭代器的特点:

1节省内存,  2.惰性机制,  3一次性取值,只能按顺序取

可迭代变量.__iter__(),返回一个迭代器.

 l = [1,2,3,4]
res = l.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__()) res.__setstate__(2) # 控制迭代器从哪儿开始迭代
print(res.__length_hint__()) # 迭代器中有多少个元素 res1 = l.__iter__()
res2 = l.__iter__() # res1和res2都是迭代器
# 是两个完全不同的迭代器
for i in res1:
print(i)
print('------')
for i in res1:
print(i)
print('^^^^^^')
for i in res2:
print(i)
print('!!!!!!!')
for i in l.__iter__():
print(i)
print('******')
for i in l.__iter__():
print(i)
for i in l:
print(i)
print('########')
for i in l:
print(i)

for 循环取值

for循环内部的机制就是迭代器取值机制

在for循环执行的过程中:先把可迭代的变成一个迭代器,然后再从中一个个的取值

for循环与迭代器的关系:

无论是可迭代的还是迭代器都可以被for循环,

如果直接循环迭代器,循环一次就能把值取完,不能再进行取值,

如果循环的是非迭代器,那么每一次循环都会通过iter生成一个新的迭代器,可以重复取值.

python三大神器之迭代器的更多相关文章

  1. python三大神器===》迭代器

    迭代器: 1.认识迭代器 迭代器是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 我们怎样才能 ...

  2. Python 三大神器

    Python 三大神器 Python 中有很多优秀的包,本文主要讲一下 pip, virtualenv, fabric 1. pip 用来包管理 文档:https://pip.pypa.io/en/l ...

  3. python三大神器===》装饰器

    1.认识装饰器 如果你经常看我的博客,你已经学会了python的前两大‘神器’(迭代器,生成器),那么什么是装饰器呢?就如字面意义装饰器是对某个事物(通常指函数)进行装饰,让其在不修改任何内部代码的情 ...

  4. Python三大神器:装饰器,迭代器,生成器

    一.装饰器 由于一个函数能实现一种功能,现在想要在不改变其代码的情况下,让这个函数进化一下,即能保持原来的功能,还能有新的"技能",怎么办? 现已经存在一个自定义的函数func1, ...

  5. python三大神器之生成器

    生成器Generator: 本质:迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现) 特点:惰性运算,开发者自定义 在python中有三种方法来获取生成器: 1.通过生成 ...

  6. python三大神器之一fabric使用

    fabric 是一个python包 是一个基于ssh的部署工具包 通常用来对网站 微服务等等的批量部署 例如 我有5台线上服务器 可以通过一台对着5台分发,实现自动部署的目的. 简单介绍下 fabri ...

  7. python三大神器

    Python 中有很多优秀的包,本文主要讲一下 pip, virtualenv, fabric 1. pip 用来包管理 文档:https://pip.pypa.io/en/latest/instal ...

  8. python三大神器之装饰器

    装饰器的形成过程 假如你要写一个计算函数执行时间的函数,代码如下: import time def func1(): print('in func1') def timer(func): def in ...

  9. python三大神器===》生成器

    1. 认识生成器 利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成.但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一 ...

随机推荐

  1. Flask博客类登录注册验证模块代码(十四)

    1 文件系统 blog #博客类 App forms #表单 __init__.py user.py models #模型 __init__.py user.py static #静态文件 templ ...

  2. 【Leetcode】【Easy】Palindrome Number

    Determine whether an integer is a palindrome. Do this without extra space. 判断一个整数是不是回文整数(例12321).不能使 ...

  3. JSP中include动作与指令

    include指令 JSP中有三大指令:page,include,taglib,之前已经说过了page的用法.这里介绍下include. 使用语法如下: <%@ include file=&qu ...

  4. May 26th 2017 Week 21st Friday

    One thorn of experience is worth a whole wilderness of warning. 一次痛彻心扉的经历,抵得上千百次的告诫. Several days ag ...

  5. [EffectiveC++]item30:Understand the ins and outs of inlining

  6. win8中 用office 提示值不在预期的范围内

    原文:http://bbs.kafan.cn/thread-1401951-1-1.htmlhttp://bbs.kafan.cn/thread-1401951-1-1.html 错误如下: 名称:  ...

  7. codeforces 609E Minimum spanning tree for each edge

    E. Minimum spanning tree for each edge time limit per test 2 seconds memory limit per test 256 megab ...

  8. (第三场) A PACM Team 【dp,五维背包】

    链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  9. idea + maven + webapp 项目搭建

    1.File-> New -> Project

  10. SpringBoot非官方教程 | 终章:文章汇总

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-all/ 本文出自方志朋的博客 SpringBo ...