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语句的函数
任何具有_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语句的函数
相关文章推荐
- 迭代器和解析——Python(学习笔记)
- 【Python学习】python学习手册--第十四章 迭代器和解析 第一部分
- Python学习笔记-04-迭代器和解析之初见
- 《Python 学习手册4th》 第十四章 迭代器和解析
- python学习笔记-迭代器和类
- python学习手册笔记--第12~13,15章
- python 学习笔记(8)高级迭代器
- Python学习笔记 - 迭代器Iterator
- 【Python 学习手册笔记】数字
- Python基础学习笔记3 - list 和 str 的区别,转化,list解析
- python学习手册笔记--第16~19章--function_base
- Python学习笔记010_迭代器_生成器
- Python笔记(五)迭代器和解析
- Python学习笔记 - 迭代器Iterator
- python︱HTML网页解析BeautifulSoup学习笔记
- Python学习笔记(10)-生成器generator和迭代器Iterator
- 【Python学习】python学习手册--第二十章 迭代和解析,第二部分
- python 学习笔记(7)类和迭代器
- python学习手册笔记--第21~24章
- python学习笔记-函数式编程、迭代器和生成器