装饰器
定义:本质是函数,装饰其它函数是为了给其添加新功能;
原则: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()
而那个*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而写的。