第二部分
高级特性
切片
迭代
1.如果给定一个list或tuple我们可以通过for循环来历遍这个list后者tuple。
这种历遍我们称为迭代(Iteration)
2.dict
由于dict的储存不是按照list的方式顺序排列,所以迭代出的结果顺序可能不一样。
默认dict迭代的是key,如果要迭代value:
for value in d.itervalues()
如果要同时迭代:
for k,v in d.iteritems()
3.怎么判断是否可以迭代?
使用collections模块的iterable
form collections import Iterable
isinstanc('abs',Iterable)
4.下标循环
java通过下标循环
如果想在python中实现类似下标循环
内置的enumerate函数可以吧list编程索引-元素对
for i,value in enumerate(['A','B','C']):
列表生成式
1.列表生成式即List Comprehensions
内置的非常简单强大可以用来创建list的生成式
2.直接在列表里面写上公式
[ x*x for x in range(1,11) if x%2 == 0 ]
##还可以写两层循环,生成全排列
##三层及以上使用较少
3.列表生成式也可以使用两个变量生成list
4.最后把一个list中所有的字符串变小写
生成器(Generator)
1.如果列表元素可以按照某种算法推算出来,那我们是否可以在循环过程中不断推算出后续的元素而不必创建完整的list。python中这种一边循环一边计算的机制,称为生成器
2.只要把列表的[]改成(),就创建了一个generator
3.如果一个函数定义中包含yield关键字,那这个函数就是一个generator
4.generator和函数的执行流程不一样
函数是顺序执行,遇到return语句或者最后一行函数语句就返回。
而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
5.generator是非常强大的工具
6.斐波那契数列
def fib(max):
n,a,b=0,0,1
while n < max:
print b
a,b=b,a+b
n = n+1
7.将斐波那契数列函数改为generator
##将print b 改为yield b
def fib(max):
n,a,b=0,