Python装饰器,json,pickle
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python装饰器,json,pickle相关的知识,希望对你有一定的参考价值。
装饰器
定义:本质是函数,装饰其它函数是为了给其添加新功能;
原则:1.不能修改被装饰的函数的源代码
2.不能修改被装饰的函数的调用方式
实现装饰器知识储备:
1.函数即变量;
2.高阶函数
3.嵌套函数
高价函数+嵌套函数=装饰器
下面我哪一个案例来讲一讲
1 import time 2 def timmer(func): 3 def warpper(*args,**kwargs): 4 start_time=time.time() 5 func() 6 stop_time=time.time() 7 print(‘the func run time is %s‘ %(stop_time-start_time)) 8 return warpper 9 10 @timmer 11 def test1(): 12 time.sleep(3) 13 print(‘in the test1‘) 14 15 test1()
而那个*args,和**kwargs,则是为了当要装饰的函数有参数的时候,那么,调用的函数,则需要传参才能调用。并且,传参,我们只需要,就是func(*args,**args)就可以了。这里还是推荐
去看看银角大王的博客,不过我第一次看是没看懂: http://www.cnblogs.com/wupeiqi/articles/4980620.html
json
http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html这个播客写得不错,特别是对象的那一块。
pickle
pickle和json差不多,但是,它只有在Python中使用才符合规范。不像json,是通用的。
import pickle def sayhi(name): print("hello,",name) info = { ‘name‘:‘alex‘, ‘age‘:22, ‘func‘:sayhi } f = open("test.text","wb") #print(json.dumps(info)) print( ) f.write( pickle.dumps( info) ) f.close()
import pickle def sayhi(name): print("hello2,",name) f = open("test.text","rb") data = pickle.load(f) #data = pickle.loads(f.read()) print(data["func"]("Alex"))
通过pickle.dumps()来序列化想要序列化的东西,可以使数组可以是方法,怎么序列化的,就可以怎么反序列化然后使用。看反序列话,调用了
pickle.load(),然后,电泳存进去的字典的一个key的value的方法,函数即变量,不要怀疑这里的很不合理。而json无法达到这样子的目的,因为json不是专门为Python而写的。
以上是关于Python装饰器,json,pickle的主要内容,如果未能解决你的问题,请参考以下文章
python学习第四天,列表生产式,匿名函数,生成器,内置函数,迭代器,装饰器,json和pickle的序列化和反序列化
python-基础 生成式 生成器 迭代器 JSON pickl
Day4 - 迭代器&生成器装饰器Json & pickle 数据序列化软件目录结构规范