您的位置:首页 > 编程语言 > Python开发

python学习手册笔记--第14.20章--迭代器和解析

2012-02-26 18:18 387 查看
第14章 迭代器和解析 第一部分

任何具有_next_方法的对象都是可迭代的

读取文件更好的方法:

for line in open('log.txt','r')

print(line, end=' ')

next(x) <===> x.__next__()

l=[1,2] I=iter(l) I.__next__()>>>1

手动迭代:try : 捕获迭代越界的异常

x=next(I)

except StopIteration:

break

字典的iter自动返回一个key

列表解析 [x + 10 for x in l]速度快

对文件 [line.rstrip() for line in open('')]

for循环可以有if [x + 10 for x in l if x < 10]

[x + y for x in 'ab' for y in 'cd']>>>['ac','ad','bc','bd']

filter选择一个函数为真的项(去掉空项) list(filter(bool, open('log.txt','r')))

reduce针对可迭代对象中的成对的项运行一个函数

sum,any,all,max,min都可以操作可迭代对象

'$'.join(['a','b'])>>>a&b

函数调用时,*arg可以将函数解包为单个函数

range支持多个迭代器

zip,map,filter不支持多个活跃的迭代器

第20章--迭代和解析 第二部分

[expression for target1 in iterable1 [if condition1]

for target2 in iterable2 [if condition2]

……

]

生成器函数yield,计算一个值,状态挂起,返回一个迭代器,访问迭代器后,状态继续

yield做一点工作就停止,在内存方面比较节省

g.send(12) 将12给生成器,生成器继续执行,提前调用next(g)会出现none

生成器函数:def test(k):

for x in k:

yield x

g=test('cai') 同下

生成器表达式:g=(x for x in 'cai')

生成器是单词迭代

可以用迭代工具模拟zip和map

计时模块:

import time

reps = 1000 #可以自定义

repslist = range(reps)

def timer(func, *pargs, **kargs):

start = time.clock()

for i in repslist:

ret = func(*pargs, **kargs)

elapsed = time.clock() - start

return (elapsed, ret)

补充:可以通过 if sys.platform[:3] == 'win' 判断系统平台

非windows系统可利用time.time()计时,通过_reps = XX简化模块

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

函数陷阱:

1.本地变量是静态检测的

x = 99

def se()

print(x)

x = 20

se()

结果print(x)直接报错,由于编译有x=20赋值语句,x为se()的本地变量,

而print(x)时,x在本地域并不存在

2.默认和可变对象

def saver(x=[])

x.append(1)

print(x)

saver([2])>>>[2,1] saver()>>>[1] saver()>>>[1,1]

3.没有return语句的函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: