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()
pickle序列化

 

 

 

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反序列化

通过pickle.dumps()来序列化想要序列化的东西,可以使数组可以是方法,怎么序列化的,就可以怎么反序列化然后使用。看反序列话,调用了

pickle.load(),然后,电泳存进去的字典的一个key的value的方法,函数即变量,不要怀疑这里的很不合理。而json无法达到这样子的目的,因为json不是专门为Python而写的。

 

posted on 2017-09-29 22:06  柯腾  阅读(144)  评论(0编辑  收藏  举报