for、while循环
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循环的更多相关文章
- 【.net 深呼吸】细说CodeDom(8):分支与循环
有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- 模仿Linux内核kfifo实现的循环缓存
想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...
- 【JS基础】循环
for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...
- 【python之路4】循环语句之while
1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...
- To Java程序员:切勿用普通for循环遍历LinkedList
ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...
- JavaScript单线程和浏览器事件循环简述
JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...
- .NET基础 一步步 一幕幕[循环、逻辑语句块]
循环.逻辑语句块 好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...
- Linux进程管理及while循环
目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...
随机推荐
- 手机测试用例-wap测试用例
Software Test Case P/F comment tester test time P/F comment tester ID 功能描述 操作步骤 预期结果 备注 wap_001 wap ...
- Luogu P2114[NOI2014]起床困难综合症 【贪心/位运算】By cellur925
题目传送门 所以NOI的题现在简单惹? 30分做法:枚举开始的权值,n²过掉. 100分做法:竟然是贪心qwq.因为我们的计算背景是二进制下,所以我们贪心地想让每一位都是1.我们现在需要解决的问题,就 ...
- Codeforces Round #324 (Div. 2)
CF的rating设置改了..人太多了,决定开小号打,果然是明智的选择! 水 A - Olesya and Rodion #include <bits/stdc++.h> using na ...
- 字符串处理 Codeforces Round #305 (Div. 2) A. Mike and Fax
题目传送门 /* 字符串处理:回文串是串联的,一个一个判断 */ #include <cstdio> #include <cstring> #include <iostr ...
- MySQL、SqlServer、Oracle三大主流数据库分页查询 (MySQL分页不能用top,因为不支持)
一. MySQL 数据库 分页查询MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它 ...
- forward和sendRedirect的区别
部分内容转自:http://blog.csdn.net/zhouysh/article/details/380364和http://blog.csdn.net/frank_jay/article/de ...
- J2sdk中的主要的包介绍
- java 替换字符串模板(模板渲染)
java渲染字符串模板,也就是说在java字符串模板中设置变量字符串,使用变量去渲染指定模板中设置好的变量字符串.下面介绍4种替换模板方式: 1.使用内置String.format String me ...
- 分层开发之C#分层
假如没有用分层开发,仔细分析三人的开发过程,很容易发现其中的问题: >三人排队式的轮番工作,花费的时间是三人工作时间之和. >后面开发的人基本都是要先花费时间熟悉前面人的代码,否则开发难以 ...
- iframe及其引出的页面跳转问题
前提:在前一段的工作中碰到了一些页面跳转,子页面跳到父页面上的等等问题,当时页面总是跳不对,或者跳错,要不就是不需要重新打开窗口,却又重新打开一个了,特此搜寻网上各大博客论坛,加上项目经验整理一篇文章 ...