一、条件和循环

1. if语句

if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
else:
<执行4>

例如:

age=5
if age>=18:
print 'adult'
elif age>=6:
print 'teenager'
else:
print 'kid'

一定要注意条件语句结尾的冒号,以及代码段的缩进。

只要if参数是非零数值、非空字符串、非空list等,就判断为True,否则为False

2.循环

range(num):返回0到num-1之间的整数。例如:

print range(5)

>>>[0,1,2,3,4]

for循环for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句。

s=0
for i in range(101):
s+=i
print s

while循环:只要条件满足,就不断循环,条件不满足时退出循环。

i=1
s=0 while(i<=100):
s=s+i
i=i+1 print s

3.迭代

dict类型for ..in ..迭代有以下几种方式:

d={'a':1,'b':2,'c':3}

默认迭代key

for k in d:
print k

iterkeys()返回key迭代器

for key in d.iterkeys():
print key

itervalues()返回value迭代器

for value in d.itervalues():
print value

iteritems()返回键值对迭代器

for key,value in d.iteritems():
print key+"="+str(value)

判断对象是否可迭代:通过collections模块的Iterable类型判断

from collections import Iterable
print isinstance(d,Iterable)

带下标迭代:Python内置的enumerate函数可以把一个list变成索引-元素对

l=range(5)
for i,value in enumerate(l): print i,value

二、生成式

1.列表生成式

列表生成式是python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理。语法格式为:

[exp for val in collection if condition]

相当于

result=[]
for val in collection:
if(condition):
result.append(exp)

我们看个例子:将列表中的字符串转换为小写组成新的列表。

L=['Hello',10,'World',None]
print [s.lower() for s in L if isinstance(s,str)]
运行结果: ['hello', 'world']

2.字典生成式

字典生成式基本格式如下:

{key-exp:val-exp for value in collection if condition}

例如:

print {i:i*10 for i in range(1,10) if(i%2==0)}

运行结果为: {8: 80, 2: 20, 4: 40, 6: 60}

3.集合生成式

集合生成式格式和列表生成式类似,只不过用的是大括号:

{exp for value in collection if condition}

例如:统计列表中字符串元素的各种长度。

L=['Hello',10,'World',None,'aa']
print {len(x) for x in L if isinstance(x,str)} 运行结果: set([2, 5])

4.嵌套列表生成式

嵌套列表生成式要注意for循环的顺序。

例如:我们想提取由两个列表组成的嵌套列表中,含有a的字符串:

L1=[['Cathy','Li'],['Zhang','Wang','Mike','Tom','Jack']]
print [name for list in L1 for name in list if name.count('a')>0] 运行结果: ['Cathy', 'Zhang', 'Wang', 'Jack']

我们还可以将嵌套列表中的数据进行扁平化展现,例如:

L2=[(1,3,5),(2,4,6),(100,200)]
print [value for t in L2 for value in t] 运行结果: [1, 3, 5, 2, 4, 6, 100, 200]

发现语法太简洁啦!!

三、生成器

在Python中,有一种自定义迭代器的方式,称为生成器(Generator)。

定义生成器的两种方式:

1.创建一个generator,只要把一个列表生成式的[]改成(),就创建了一个generator:

l=[x for x in range(1,10)]
print l g=(x for x in range(1,10))
print g.next()
print g.next() for x in g:
print x 运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
1
2
3
4
5
6
7
8
9

generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

2.定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:

def fib(n):
a=1
b=1
i=0; yield a
yield b while(i<n):
a,b=b,a+b
i+=1
yield b for x in fib(10):
print x 运行结果:
1
1
2
3
5
8
13
21
34
55
89
144

生成器和普通函数区别:

普通函数是顺序执行,遇到return语句或者最后一行函数语句就返回;

而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

def test():
print 1
yield
print 2
yield
print 3
yield t=test()
t.next()#运行结果1
t.next()#运行结果2
t.next()#运行结果3

如需转载,请标明原文链接:http://www.cnblogs.com/janes/

python【5】-生成式,生成器的更多相关文章

  1. Python 列表生成式 生成器

    [x for x in os.listdir("F:\XXX")] 生成器(x * x for x in range(10)) 如果列表元素按照某种算法推算出来,那我们就可以在循环 ...

  2. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  3. python协程函数应用 列表生成式 生成器表达式

    协程函数应用 列表生成式 生成器表达式   一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._n ...

  4. python 基础 4.4 生成式 生成器 迭代器

    一.生成式和生成器   列表生成式是python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理.   #/usr/bin/python #coding=u ...

  5. 一文搞懂Python迭代器和生成器

    很多童鞋搞不懂python迭代器和生成器到底是什么?它们之间又有什么样的关系? 这篇文章就是要用最简单的方式让你理解Python迭代器和生成器! 1.迭代器和迭代过程 维基百科解释道: 在Python ...

  6. Day10 python高级特性-- 生成器 Generator

    列表生成式可以创建列表,但是受内存限制,列表容量时有限的,创建一个巨量元素的列表,不仅占用很大的存储空间,当仅仅访问前几个元素时,后面的绝大多数元素占用的空间都被浪费了. 如果list的元素可以按照算 ...

  7. python高级之生成器&迭代器

    python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container):多个元素组织在一起的数据结构 可迭代对象( ...

  8. 【python】迭代器&生成器

    源Link:http://www.cnblogs.com/huxi/archive/2011/07/01/2095931.html 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素 ...

  9. 第三篇:python高级之生成器&迭代器

    python高级之生成器&迭代器   python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container ...

  10. python中的生成器函数是如何工作的?

    以下内容基于python3.4 1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函 ...

随机推荐

  1. 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机

    转载地址:http://blog.csdn.net/qs_hud/article/details/8884867 注册机及软件下载地址:http://download.csdn.net/detail/ ...

  2. 立即执行函数: (function(){...})() 与 (function(){...}()) 有什么区别?

    没有区别. function foo() {...} // 这是定义,Declaration:定义只是让解释器知道其存在,但是不会运行. foo(); // 这是语句,Statement:解释器遇到语 ...

  3. python-进程,线程,协程

    1.进程和线程  进程定义:进程是正在运行的程序的实例,进程是内核分配资源的最基本的单元,而线程是内核执行的最基本单元,进程内可以包含多个线程,只要记住这三个要点,就可以很清楚的理清进程和线程的行为模 ...

  4. [TCPIP] 传输控制协议 Note

    TCPIP  TCP 传输控制协议 TCP提供一种面向连接的,可靠的字节流服务. 面向连接意味着两个使用TCP的应用在传输数据之前先建立一个TCP连接,这个过程跟打电话相似.在一个TCP连接中仅有两方 ...

  5. No identities are available for signing的解决方法

    今天将做好的app提交到app store,结果就出现标题上的错误.“No identities are available for signing”.这个错误对于一个iOS开发者来说已经很平常了,这 ...

  6. OOP过度抽象

    OI的时候,解决问题是第一位的,别老想着可维护性.能过就行啦,又不是工程. 下面是两篇相关的文章 来自酷壳 编程真难啊 2009年9月3日 陈皓 上周,在Sun的Java论坛上出现了一个这样的帖子,L ...

  7. Android Gallery

    xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...

  8. Github的命令清除

    最近折腾Github,对于我这个英语词汇量不多的人来说就是折磨,几乎是翻着字典探索的. 功能上就不多说了,还没发现新东西,只是刚摸索出如何上传(下载还没弄明白了,苦啊....) 就是在使用GitBas ...

  9. python进阶(四)---需要了解的魔法方法

    以下内容,源于个人理解所得,纯属臆测,爱信不信:-D.欢迎大家留言讨论指正. 1.__new__魔法方法: 原型:__new__(cls, *args, **kwargs) 说明:__new__魔法方 ...

  10. ichart.js绘制虚线 ,平均分虚线

    var Data=new Array(); Data[0] = { labels : ["第一单元","第二单元","第三单元"," ...