Python装饰器,json,pickle

装饰器

定义:本质是函数,装饰其它函数是为了给其添加新功能;

原则:1.不能修改被装饰的函数的源代码

2.不能修改被装饰的函数的调用方式

实现装饰器知识储备:

1.函数即变量;

2.高阶函数

3.嵌套函数

高价函数+嵌套函数=装饰器

下面我哪一个案例来讲一讲

 import time
def timmer(func):
def warpper(*args,**kwargs):
start_time=time.time()
func()
stop_time=time.time()
print('the func run time is %s' %(stop_time-start_time))
return warpper @timmer
def test1():
time.sleep(3)
print('in the test1') test1()

Python装饰器,json,pickle

而那个*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而写的。
上一篇:Java 授权内幕--转载


下一篇:Elastic Search集成IK分词器、集成拼音分词器