python之装饰器生成器内置函数JSON

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之装饰器生成器内置函数JSON相关的知识,希望对你有一定的参考价值。

一、装饰器:

装饰器,器在这里的意思是函数,也就是装饰函数。作用是给其他函数添加新功能,它可以不改变原有的函数,原来的函数和原来一模一样,什么都不需要改变,只需要在函数外部加上调用哪个装饰器就可以了,装饰器的作用就是不改变原来函数的调用方式,不改变原来函数的代码,给它增加了一个新功能。但是不改变函数,给它增加新功能,那是不可能的,装饰器只不过是偷偷改变了原来的函数而已,而原来的函数不知不觉。

学习装饰器前的知识储备:

1、函数即变量,在python里面函数就是一个变量,函数名就是变量名,函数名里存着函数内存地址。它把函数体存在内存里,在调用的时候从函数名里面的内存地址来函数体运行这个函数。函数名后面加上小括号就是调用,只有函数名就是打印函数的内存地址。

def test():
    int(input(please enter you age:))
test()
print(test)

运行结果:

please enter you age:20
<function test at 0x02A84270>

2、高阶函数,如果函数的入参为函数的话,那么这个函数就是一个高阶函数。

3、函数嵌套,函数嵌套就是在函数里再定义一个函数,而不是调用一个函数。

def A(a):
    
    print("I am A")
    
    def B(b):
        
        print("a+b=", a+b)
        
        print("I am B")
        
    B(2)
    
    print("Over!!!")
    
A(3)

了解以上知识后,我们来写一个简单的装饰器,用来统计函数运行时间。


import time


def fun():
time.sleep(3)
print(‘in the fun‘)


def test(func):
start_time = time.time()
func()
stop_time = time.time()
print(‘the func run time is %s‘ % (stop_time - start_time))


test(fun)
 

运行结果:

1 in the fun
2 the func run time is 3.007230520248413

但是这样的话,我们每次都要将一个函数作为参数传递给test1函数。改变了函数调用方式,之前执行业务逻辑时,执行运行bar(),但是现在不得不改成test1(bar)。此时就要用到装饰器。我们就来想想办法不修改调用的代码;如果不修改调用代码,也就意味着调用bar()需要产生调用test1(bar)的效果。我们可以想到将test1赋值给bar,但是test1似乎带有一个参数……想办法把参数统一吧!如果test1(bar)不是直接产生调用效果,而是返回一个与foo参数列表一致的函数的话……就很好办了,将test1(bar)的返回值赋值给bar,然后,调用bar()的代码完全不用修改!

import time

def Time(fun):

    def deco():

        start_time = time.time()

        fun()

        stop_time = time.time()

        print(the func run time is :%s%(stop_time - start_time))

    return deco
@Time
def dos():

    time.sleep(2)

    print(in the dos)

dos()

运行结果:

in the dos
the func run time is :2.0002448558807373

这样,我们就提高了程序的可重复利用性,当其他函数需要调用装饰器时,可以直接调用。装饰器在Python使用如此方便都要归因于Python的函数能像普通的对象一样能作为参数传递给其他函数,可以被赋值给其他变量,可以作为返回值,可以被定义在另外一个函数内。

 1 import time
 2 
 3 def Timing(fun):
 4 
 5     def deco(*arg, **kwarg):
 6 
 7         start_time = time.time()
 8 
 9         fun(*arg, **kwarg)
10 
11         stop_time = time.time()
12 
13         print(the func run time is :%s%(stop_time - start_time))
14 
15     return deco
16 
17 @Timing
18 def tar(name, age):
19 
20     time.sleep(2)
21 
22     print(in the tar :, name, age)
23 
24 tar(hk, 18)

运行结果:

1 in the tar : hk 18
2 the func run time is :2.000657081604004

 

















以上是关于python之装饰器生成器内置函数JSON的主要内容,如果未能解决你的问题,请参考以下文章

python学习--装饰器生成器内置函数json

python学习笔记:装饰器生成器内置函数json

python学习笔记:装饰器生成器内置函数json

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

python笔记5:装饰器内置函数json

装饰器生成器迭代器及python中内置函数的使用