Day18&Day19 文件处理,迭代器生成器,三元表达式

###文件处理 

f.open(‘chengli’,endcoding=‘utf-8’)

data=f.read()

print(data)

f.close() 手动关

 

文件没有修改一说,只有覆盖

f.write()从光标处开始写

 

 

with open(‘a.txt’,’w’) as data:

with可以同时打开多个文件,用逗号隔开

 

###高级函数

map

reduce #from functools import reduce

 

list=(‘123_sb’,34,’a’,’b’)

filter(lambda x:x.endswith(“sb”),list) 

 

f.flush() 刷新

f.tell() 光标当前显示的位置

#只有read(3)代表读取3个字符,其余的文件内光标移动都是以字节为单位,如seek,tell,readline,truncate

 

newline=‘’读取文件中真正的换行符

 

f.seek(0)用来控制光标的移动,0移动到首字节

f.seek(10,1) #1表示基于相对位置seek,即上一次光标停止的位置,seek 10个字节文件必须以b模式打开

f.seek(-10,2)#2表示逆序seek10个字节

 

f.truncate()文件截断,文件必须以w方式打开

 

data[-1]读取最后一行

 

###迭代器

for,sum, min, max

print(dir(x))

x._iter_()变成可迭代对象,遵循迭代器协议,即可使用x._next_()

 

###生成器generator object

自动实现了迭代器协议,生成器即为可迭代器,也可理解为一种数据类型

生成器函数:

yield语句得到返回值,即得到生成器

def test()

      yield 1

      yield 2

      yield 3

可yield多次

yield可保留函数的运行状态,遇到yield的停留在执行完yield的位置

可以在如:

baozil=pro.g._next_()

#加代码

baozil= pro.g._next_()

 

 

生成器表达式:

三元表达式:例如: 

’if判断的返回值’ if name == ‘alex’ else ‘else的返回值’

 

用for循环建列表:

l = [i for i in range(10)] #一元

l = [‘元素%s’ %i for i in range(10)] #二元

l = [‘元素%s’ %i for i in range(10) if i>5] #三元

三元表达式的缺点是只能生成列表,而且占内存,适合小数据

 

 

laomuji = (‘鸡蛋%s’ %i for i in range(10))#生成器表达式

print(laomuji._next_())  #或print(next(laomuji))

 

生成器表达式比列表解析更节省内存

 

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

 

###触发生成器运行的方法:

t._next_()

next(t)

t.send(None )

 

def test():

    print('开始了')

    first=yield 1

    print('第一次',first)

    yield 2

    print('第二次')

 

t=test()

res=t.__next__()

print(res)

 

t.send(None)#None是传值给yield,yield赋值给first,且函数停留在first的位置

 

###并发

 

上一篇:多线程共享全局变量以及由此带来的安全问题/day18


下一篇:python练习题-day18