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()将文件内容从内存写入磁盘