Python入門之迭代,列表解析,生成器及文件操作
迭代器是訪問集合元素的一種方式,迭代器包含了__iter__()(返回迭代器對(duì)象本身)next()(返回迭代器的下一個(gè)元素)
迭代器只能往前不會(huì)退后
以下類型支持迭代
-
序列類型:list,str,tuple
-
非序列類型:dict,file
-
自定義類
通過內(nèi)建的函數(shù)iter()或?qū)ο笞詭Х椒╛_iter__可以獲取迭代器對(duì)象
l1=range(5) iter1=iter(l1) print l1 <listiterator at 0x291cc90>
使用next()方法可以訪問下一個(gè)元素:
print iter1.next() 0 print iter1.next() 1 print iter1.next() 2 ... print iter1.next() --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <iPython-input-10-54f0920595b2> in <module>()
如果迭代器越界則會(huì)拋出StopIteration異常
列表解析:根據(jù)已有的列表,高效產(chǎn)生新列表的方法
將列表中的值開方后放入另外一個(gè)列表:
l1=[1,2,3,4,5] l2=[i**2 for i in l1] print l2 [1, 4, 9, 16, 25]
也可加入判斷,將列表中的偶數(shù)開放后放入另外一個(gè)列表:
l1=[1,2,3,4,5] l2=[i**2 for i in l1 if i%2 == 0] print l2 [4, 16] [expression for iter_var in iterable if cond_expr]
生成器表達(dá)式
(expression for iter_var in iterable if cond_expr)
g1=(i**2 for i in range(1,5)) print g1 <generator object <genexpr> at 0x2921500>
通過next方法獲取值
g1.next() 1 g1.next() 4
內(nèi)置函數(shù)open()用于打開文件和創(chuàng)建文件對(duì)象 close()用于關(guān)閉
open(name[,mode[,bufsize]])
name表示文件名,mode表示模式,bufsize表示緩沖區(qū)參數(shù)
mode有以下幾種
r 讀;w 寫;a 從文件底部追加;r+ 可讀可寫,不可創(chuàng)建不存在的文件;w+ 可讀可寫,可創(chuàng)建不存在的文件 a+ 可讀可寫,從底部追加,不存在則創(chuàng)建
b表示以二進(jìn)制模式打開文件
bufsize
0表示無緩沖 1表示使用緩沖 負(fù)數(shù)表示使用系統(tǒng)默認(rèn)設(shè)置,正數(shù)表示指定大小緩沖
file.readline()輸出一行,file.readlines()輸出所有
f1=open('/tmp/passwd','a+') f1.readline() 'root:x:0:0:root:/root:/bin/bash\n' f1.readlines() ['bin:x:1:1:bin:/bin:/sbin/nologin\n', 'daemon:x:2:2:daemon:/sbin:/sbin/nologin\n', 'adm:x:3:4:adm:/var/adm:/sbin/nologin\n', ...]
file.tell()獲取在文件當(dāng)前位置
f1.tell() 1099
file.seek(offset[,whence])控制位置
whence起點(diǎn):0,從文件頭;1,從當(dāng)前位置;2,從末尾 offset偏移量
f1.seek(10,0) f1.readline() ':root:/root:/bin/bash\n'
file.write('some words')寫入文件
file.flush()將文件內(nèi)容從內(nèi)存寫入磁盤