python学习之day5,装饰器,生成器,迭代器,json,pickle

时间:2022-07-24 13:36:26

1.装饰器

 import os
import time
def auth(type):
def timeer(func):
def inner(*args,**kwargs):
start = time.time()
func(*args,**kwargs)
print ("auth to %s"%type)
stop = time.time()
print ("it is running %s minit"%(stop-start))
return inner
return timeer @auth("qq")
def test1(name,age,six):
time.sleep(2)
print ("this is test1%s"%name)
@auth("weixin")
def test2():
time.sleep(2)
print ("it is test 2") test1("liruixin",22,"m")
test2()

2.生成器

生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

例如:  a = (i for i in range(10))

2.1  yield  介绍

通过yield实现在单线程的情况下实现并发运算的效果 

 #_*_coding:utf-8_*_
__author__ = 'Alex Li' import time
def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield print("包子[%s]来了,被[%s]吃了!" %(baozi,name)) def producer(name):
c = consumer('A')
c2 = consumer('B')
c.__next__()
c2.__next__()
print("老子开始准备做包子啦!")
for i in range(10):
time.sleep(1)
print("做了2个包子!")
c.send(i)
c2.send(i) producer("alex") 通过生成器实现协程并行运算

迭代器

我们已经知道,可以直接作用于for循环的数据类型有以下几种:

一类是集合数据类型,如listtupledictsetstr等;

一类是generator,包括生成器和带yield的generator function。

这些可以直接作用于for循环的对象统称为可迭代对象:Iterable

可以使用isinstance()判断一个对象是否是Iterable对象:

*可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

小结

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

3.json  and pickle 序列化

二者区别  1.json可以对列表,字典,进行序列化,支持所有开发语言。

2.pickle可以序列的对象比json多,可以对函数进行序列化,但是pickle只有python中有

json 示例

pickle用法与json完全相同

 import json
# dic = {
# "name":"liruixin",
# "age":"22",
# "country":"cn"
#
# }
#
# #序列化
# f = open("test.json","a+")
# #f.write(json.dumps(dic)) #第一种方式
# #json.dump(dic,f) #第二种方式
# f.close() # #反序列化
# f = open("test.json")
# a = json.loads(f.read())
# print(a["age"]) # f = open("test.json")
# a = json.load(f)
# print(a["age"])