zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【C# 代码小技巧】巧用 linq select 实现遍历集合返回元素 index
    [转载] redis 学习
    Html5 Canvas斗地主游戏
    K-近邻算法(KNN)
    Sql 把Xml字符串转换成一张表
    Asp.Net Mvc4分页,扩展HtmlHelper类
    SQL 分割字符串
    http://q.cnblogs.com/q/54251/
    读强化学习论文之MADDPG
    【回归】记Paddle强化学习训练营
  • 原文地址:https://www.cnblogs.com/liujinjing521/p/11213373.html
Copyright © 2011-2022 走看看