第七节:迭代器、生成器、装饰器

f.read(3)代表读取3个字符,如果是b模式打开的文件,则是读取三个字节
f.flush将文件从内存刷到硬盘
f.closeed文件如果关闭则返回True
f.encoding查看使用open打开文件的编码


tell查看光标位置
seek移动光标
truncate截断文件
0模式,从开头开始移动光标位置,默认模式就是0,以r模式打开就行
1模式,从上一次的光标位置开始移动(要以rb的方式读 文件)f.seek(10,1)
2模式,从文件末尾开始倒着移动光标f.seek(-10,2),注意windows行尾有\r\n,多用在写日志文件的时候

循环文件的方式:
for i in f:这样用到的时候才会读到内存中
for i in f.readlines():这样是是把文件所有内容读到内存中
for i in f:
f.seed(-3,2)

迭代器
递归:自己调用自己,将处理结果不断地传递给自己处理,直到得到最终结果
可迭代对象:更新换代,每次得到的结果都是基于上一次
for循环的机制(很重要)
while循环模拟for循环的工作机制
li = [1,2,3,4,5]
li_iter=li.__iter__()
while True:
try:
print(li_iter.__next__())
except StopIteration:
print("迭代完毕,终止打印")
break

生成器:就是可迭代对象,不需要通过_iter_()进行转换,直接调用方法._next_(),或者函数nest(),生成器的值只可以取一次
生成器函数:函数族后yiel代替return,可以yield多从,retrun只可以一次
列表解析:[ 'bb%s' %i for i in range(10) ],三元表达式规则,把[]换成()就变成了生成器表达式

 

三元表达式:
"sd" if name == "sdd" else "sb"
一元 二元 三元

列表解析:
[ 'bb%s' %i for i in range(10) ] 生成列表,数值较大的时候会占用内存

 

 

装饰器:本质就是函数,功能激素hi为其他函数添加附加功能

原则:

1、不修改被修饰函数源代码

2、不修改被修饰函数的调用方式

知识储备:

1、高阶函数、2、函数的嵌套  3、闭包

@timmer 在修饰的函数之前定义一下,相当于test= timmer(test) 


import time
def timmer(func):
def warper(*args,**kwargs):#处理多个参数
     strat_time = time.time()
res=func(*args
,**kwargs)#处理多个参数及返回值
     stop_time = time.time()
print("程序运行时间:%s" %(stop_time-strat_time))
return res #处理返回值
 return warper
@timmer #调用装饰器
def test(name,age):
time.sleep(
2)
print("我的名字是:%s,我的年龄是%s 运行完毕"%(name,age))
return "这是test的返回值"

print(test("sss",16))
我的名字是:sss,我的年龄是16 运行完毕 程序运行时间:2.000950336456299 这是test的返回值

解压序列

l=[1,2,3,4,5,6,7]

a,*_,c=1 

a=1

c=7

变量值交换

f1=1

f2=2

f1,f2=f2,f1

#处理返回值
posted @ 2020-04-07 23:40  轰天雷  阅读(89)  评论(0编辑  收藏  举报