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

 

posted @ 2020-09-28 23:47  SmallCap  阅读(80)  评论(0)    收藏  举报