python学习-42 装饰器 --- 函数闭包1

Posted liujinjing521

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习-42 装饰器 --- 函数闭包1相关的知识,希望对你有一定的参考价值。

函数闭包举例:

def father(name):
    print(hello world)
    def son():
        print(儿子说:我的爸爸是%s % name)
        def grandfson():
            print(孙子说:我的爷爷是%s % name)
        grandfson()
    son()
father(小明)

运行结果:

hello world
儿子说:我的爸爸是小明
孙子说:我的爷爷是小明

Process finished with exit code 0

 

 

函数的包: 就是嵌套里的一层一层的函数

闭: 就是封装的意思

 

 

----------函数闭包的装饰器基本实现
import time

# 装饰器框架
def timmer(func):
    def wrapper():
        start_time = time.time()
        func()
        stop_time = time.time()
        print(运行时间为;%s %(stop_time-start_time))
    return wrapper

@timmer
def test():
    time.sleep(1)
    print(test函数运行完毕)

#  test =timmer(test)  相当于 @timmer
test()

运行结果;

test函数运行完毕
运行时间为;1.000901460647583

Process finished with exit code 0

 

---------函数闭包加上返回值
import time

# 装饰器框架
def timmer(func):
    def wrapper():
        start_time = time.time()
        res = func()       # 就是在运行test()
        stop_time = time.time()
        print(运行时间为;%s %(stop_time-start_time))
        return res
    return wrapper

@timmer  # test = timmer(test)
def test():
    time.sleep(1)
    print(test函数运行完毕)
    return 132
res =test()  #
print(res)

运行结果:

test函数运行完毕
运行时间为;1.000777244567871
132

Process finished with exit code 0

 

 

------函数闭包加上参数

 


import time

# 装饰器框架
def timmer(func):
def wrapper(*args,**kwargs): # *args 元组的形式,最多可传3个值。 **kwargs 字典,相当于:wrapper(*(name,age,gender),** )
start_time = time.time()
res = func(*args,**kwargs)
stop_time = time.time()
print(‘运行时间为;%s‘ %(stop_time-start_time))
return res
return wrapper

@timmer # test = timmer(test)
def test(name,age):
time.sleep(1)
print(‘test函数运行完毕,名字:%s 年龄: %s‘ % (name,age))
return ‘132‘
ret = test(‘小王‘,20)
print(ret)

@timmer
def test1(name,age,gender):
time.sleep(1)
print(‘test1名字:%s,年龄%s,性别:%s‘ %(name,age,gender))
return ‘321‘
res =test1(‘小红‘,18,‘男‘)
print(res)
 

运行结果:

test函数运行完毕,名字:小王 年龄: 20
运行时间为;1.0007729530334473
132
test1名字:小红,年龄18,性别:男
运行时间为;1.0006530284881592
321

Process finished with exit code 0

 

以上是关于python学习-42 装饰器 --- 函数闭包1的主要内容,如果未能解决你的问题,请参考以下文章

Python 之 进阶学习

python学习第十二天:闭包函数与装饰器

python全栈学习总结六:装饰器

流畅的python第七章函数装饰器和闭包学习记录

Python学习笔记-装饰器

Python3 装饰器