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()
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而写的。

 

以上是关于Python装饰器,json,pickle的主要内容,如果未能解决你的问题,请参考以下文章

python学习第四天,列表生产式,匿名函数,生成器,内置函数,迭代器,装饰器,json和pickle的序列化和反序列化

python-基础 生成式 生成器 迭代器 JSON pickl

Day4 - 迭代器&生成器装饰器Json & pickle 数据序列化软件目录结构规范

装饰器 生成器 生成并运行 斐波那契 迭代器 内置函数 json and pickle

第九节:python pickle序列化装饰器模块

python使用上下文对代码片段进行计时,非装饰器