for循环

# for 循环后面可以对Iterable或者Iterator进行遍历
# "abc"和[1,2,3]为可迭代对象,range(4)为迭代器
for i in "abc":
print(i) # a b c
for i in [1,2,3]:
print(i) # 1 2 3
for i in range(4):
print(i)

Iterable和Iterator区别

Iterable是知道长度的。例如list, tuple,str,dict

Iterator是个地址,调用一个next()就走一步,是惰性的

判断Iterable和Iterator

迭代器一定是可迭代对象,反过来不一定成立

from collections import Iterable
from collections import Iterator
a = [1,2,3,4]
print(isinstance(a,Iterable)) # 判断a是不是可迭代对象,True
b = (i for i in range(10))
print(isinstance(b, Iterator)) # 判断b是不是迭代器,True

扩展:迭代器和生成器的区别?(生成器是创建迭代器的一种方式)

创建迭代器的三种方式之一:重写__iter__和__next__方法

class Container(object):
def __init__(self,start,end):
self.start = start
self.end = end
def __iter__(self): # 重写__iter__方法
return self
def __next__(self): # 重写__next__方法
if self.start < self.end:
i = self.start
self.start += 1
return i
else:
raise StopIteration() for i in Container(0,6): # 容器Container是一个迭代器
print(i)
# 输出 0 1 2 3 4 5

创建迭代器的三种方式之二:内置函数iter()将Iterable转换为Iterator

i = "abcde"
itor = iter(i)
print(type(itor)) # <class 'str_iterator'>
print(itor.__next__()) # a

创建迭代器的三种方式之三:生成器通过 yield语句快速生成迭代器,省略了复杂的 __iter__() & __next__()

下面代码可以看出生成器可以用调用迭代器的方式去遍历

def container(start, end):
while start < end:
yield start;
start += 1; for i in container(1,7):
print(i) # 1 2 3 4 5 6

也可以用这种方式遍历生成器

c  = container(1,7)
while True:
try:
print(c.__next__());
except StopIteration as e:
break;

扩展:yield在Python3.5以后的新特性:

while循环无限次

while true:

    ...

else:     #后面可以跟else   表示上面的循环结束就执行else中的内容

            ...

for、while循环的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(8):分支与循环

    有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...

  2. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  3. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  4. 模仿Linux内核kfifo实现的循环缓存

    想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...

  5. 【JS基础】循环

    for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...

  6. 【python之路4】循环语句之while

    1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...

  7. To Java程序员:切勿用普通for循环遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  8. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  9. .NET基础 一步步 一幕幕[循环、逻辑语句块]

    循环.逻辑语句块   好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...

  10. Linux进程管理及while循环

    目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...

随机推荐

  1. 洛谷P4841 城市规划(多项式求逆)

    传送门 这题太珂怕了……如果是我的话完全想不出来…… 题解 //minamoto #include<iostream> #include<cstdio> #include< ...

  2. 第二篇 .NET高级技术之密闭类和静态类及扩展方法

    1.密闭类是修饰为sealed的类, sealed不能有子类.一般只有系统中的一些基本类声明为sealed.面试题:是否可以编写一个类继承自String类? 答:不能,因为string被声明为了sea ...

  3. 洛谷 P3960 列队

    https://www.luogu.org/problemnew/show/P3960 常数超大的treap #pragma GCC optimize("Ofast") #incl ...

  4. 递推DP HDOJ 5092 Seam Carving

    题目传送门 /* 题意:从上到下,找最短路径,并输出路径 DP:类似数塔问题,上一行的三个方向更新dp,路径输出是关键 */ #include <cstdio> #include < ...

  5. 1051 - Good or Bad DFS 记忆化搜索

    http://lightoj.com/volume_showproblem.php?problem=1051 对于每个位置,设dfs(cur, one, two)表示前i个字母,拥有辅音字母one个, ...

  6. cocos_js写文件

    var writablePath = jsb.fileUtils.getWritablePath(); writablePath += "cocos/data/"; var fil ...

  7. 合理设置apache的连接数及进程工作方式

    网站在线人数增多,访问时很慢.初步认为是服务器资源不足了,但经反复测试,一旦连接上,不断点击同一个页面上不同的链接,都能迅速打开,这种现象就是说明apache最大连接数已经满了,新的访客只能排队等待有 ...

  8. Excel数据直接到DataTable--->DB

    1) Excel数据直接导入到临时生成的DataTable using (OleDbConnection selectConnection = new OleDbConnection("Pr ...

  9. c#内存管理,垃圾回收和资源释放

    <1>关于虚拟内存的概念 Windows使用一个虚拟寻址系统,该系统把程序可用的内存地址映射到硬件内存中的实际地址上去,这些任务完全由windows后台管理,其实际结果是32位处理机上的每 ...

  10. Java关键字-volatile

    关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制. 一旦某个共享变量(类的成员变量.类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1.保证了不同线程对这个变 ...