博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习之day5,装饰器,生成器,迭代器,json,pickle
阅读量:5161 次
发布时间:2019-06-13

本文共 2444 字,大约阅读时间需要 8 分钟。

1.装饰器

1 import os 2 import time 3 def auth(type): 4     def timeer(func): 5         def inner(*args,**kwargs): 6             start = time.time() 7             func(*args,**kwargs) 8             print ("auth to %s"%type) 9             stop = time.time()10             print ("it is running %s minit"%(stop-start))11         return  inner12     return timeer13 14 15 16 17 @auth("qq")18 def test1(name,age,six):19     time.sleep(2)20     print ("this is test1%s"%name)21 @auth("weixin")22 def test2():23     time.sleep(2)24     print ("it is test 2")25 26 27 test1("liruixin",22,"m")28 test2()

2.生成器

 

生成器

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

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

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

 

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

 

2.1  yield  介绍

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

1 #_*_coding:utf-8_*_ 2 __author__ = 'Alex Li' 3  4 import time 5 def consumer(name): 6     print("%s 准备吃包子啦!" %name) 7     while True: 8        baozi = yield 9 10        print("包子[%s]来了,被[%s]吃了!" %(baozi,name))11 12 13 def producer(name):14     c = consumer('A')15     c2 = consumer('B')16     c.__next__()17     c2.__next__()18     print("老子开始准备做包子啦!")19     for i in range(10):20         time.sleep(1)21         print("做了2个包子!")22         c.send(i)23         c2.send(i)24 25 producer("alex")26 27 通过生成器实现协程并行运算

 

迭代器

我们已经知道,可以直接作用于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完全相同

1 import json 2 # dic = {
3 # "name":"liruixin", 4 # "age":"22", 5 # "country":"cn" 6 # 7 # } 8 # 9 # #序列化10 # f = open("test.json","a+")11 # #f.write(json.dumps(dic)) #第一种方式12 # #json.dump(dic,f) #第二种方式13 # f.close()14 15 # #反序列化16 # f = open("test.json")17 # a = json.loads(f.read())18 # print(a["age"])19 20 # f = open("test.json")21 # a = json.load(f)22 # print(a["age"])

 

转载于:https://www.cnblogs.com/liruixin/p/6038985.html

你可能感兴趣的文章
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
Caroline--chochukmo
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
【bzoj2788】Festival
查看>>
执行gem install dryrun错误
查看>>
HTML5简单入门系列(四)
查看>>
实现字符串反转
查看>>
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>
苹果开发中常用英语单词
查看>>
[USACO 1.4.3]等差数列
查看>>
Shader Overview
查看>>
Reveal 配置与使用
查看>>
Java中反射的学习与理解(一)
查看>>
C语言初学 俩数相除问题
查看>>