Day18~20 python 文件处理,三元运算,生成器,装饰器
***文件的操作***
seek方法
for i in f: offs = -10 while True: f.seek(offs, 2) data = f.readlines() if len(data) > 1: print("文件最后一行是 %s" %(data[-1].decode("utf-8"))) break offs *= 2
***递归和迭代器***
for循环:基于可迭代器协议执行
转换成可迭代对象(生成迭代器):__iter__()
逐个访问: __next__()
***三元表达式和列表解析***
***生成器***
用yield返回数值
自动实现迭代器协议
***文件操作***
read文件
data_dict = eval.(getData.__next__())
print(data_dict['key'])
*注意* python2中是next()函数;python3是__next__()函数
***生成器总结***
next()
__next__()
send(value) --> let value to --> __next__() --> yield
生成器只可以遍历一次,遍历完成则为空 []
例子:
生成器:g_l = (i for i in range(10))
生成器表达式(列表解析):l = [i for i in range(10)]
###装饰器###
装饰器:本质是函数,为其他函数添加附加功能
原则:
1,不修改被修饰函数的源代码
2,不修改被修饰函数的调用方式
注意:装饰器 = 高阶函数 + 函数嵌套 + 闭包(封装变量)
***高阶函数***
1,函数接收的参数是一个函数名
2,函数的返回值是一个函数名
满足其一就是高阶函数
***装饰器***
框架:
def timmer(func): def wrapper(): print(func) res=func()
return res return wrapper
# 注意
@timmer 相当于 test=timmer(test)
def test():
return "value"
test()
接收可变长度变量格式:func(*args, **kwargs) --> 元组 (), 字典 {}
例如:func(*('name'), **{'age': 18])
***解压序列***
l = [1, 2, 3, 4, 5, 6]
取第一个和最后一个值:a, *_, b = l
则 a = 1, b = 6

浙公网安备 33010602011771号