Python入門之迭代,列表解析,生成器及文件操作
迭代器是訪問集合元素的一種方式,迭代器包含了__iter__()(返回迭代器對象本身)next()(返回迭代器的下一個元素)
迭代器只能往前不會退后
以下類型支持迭代
-
序列類型:list,str,tuple
-
非序列類型:dict,file
-
自定義類
通過內建的函數iter()或對象自帶方法__iter__可以獲取迭代器對象
l1=range(5) iter1=iter(l1) print l1 <listiterator at 0x291cc90>
使用next()方法可以訪問下一個元素:
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>()
如果迭代器越界則會拋出StopIteration異常
列表解析:根據已有的列表,高效產生新列表的方法
將列表中的值開方后放入另外一個列表:
l1=[1,2,3,4,5] l2=[i**2 for i in l1] print l2 [1, 4, 9, 16, 25]
也可加入判斷,將列表中的偶數開放后放入另外一個列表:
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]
生成器表達式
(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
內置函數open()用于打開文件和創建文件對象 close()用于關閉
open(name[,mode[,bufsize]])
name表示文件名,mode表示模式,bufsize表示緩沖區參數
mode有以下幾種
r 讀;w 寫;a 從文件底部追加;r+ 可讀可寫,不可創建不存在的文件;w+ 可讀可寫,可創建不存在的文件 a+ 可讀可寫,從底部追加,不存在則創建
b表示以二進制模式打開文件
bufsize
0表示無緩沖 1表示使用緩沖 負數表示使用系統默認設置,正數表示指定大小緩沖
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()獲取在文件當前位置
f1.tell() 1099
file.seek(offset[,whence])控制位置
whence起點:0,從文件頭;1,從當前位置;2,從末尾 offset偏移量
f1.seek(10,0) f1.readline() ':root:/root:/bin/bash\n'
file.write('some words')寫入文件
file.flush()將文件內容從內存寫入磁盤