zoukankan      html  css  js  c++  java
  • python 11

    # 一、闭包
    #
    # 判断:函数名.__closure__
    # 若返回cell,则是闭包,返回None则不是闭包。
    #
    # 闭包:内层函数对外层函数非全局变量的引用就叫闭包。
    
    
    def func1(x):
        def func2():
            print(x)
        func2()
        print(func2.__closure__)
        return x
    
    
    name = '小明'
    func1(name)
    
    # 以上这个函数,其实在执行func1(x)的时候,创建了一个x = '小明'的变量,所以,判断为闭包。
    # 用处:当执行一个函数时,如果解释器判断此函数内部存在闭包,这样python就触发一个机制,闭
    # 包的所在的临时名称空间不会随着函数的执行完毕而消失。(爬虫可以抓一次数据多次读取。)
    # 二、装饰器
    
    import time
    
    
    def timmer(f):
        def inner():
            str_time = time.time()
            f()
            end_time = time.time()
            print('此函数执行时间为:%s' % (end_time - str_time))
    
        return inner
    
    
    def login():
        time.sleep(3)
        print('洗洗更健康...')
    
    
    login = timmer(login)
    
    # 在函数上一行加入 @装饰器函数名 ,等同于执行了 函数名 = 装饰器函数名(函数名)
    import time
    
    
    def timmer(f):
        def inner():
            str_time = time.time()
            f()
            end_time = time.time()
            print('此函数执行时间为:%s' % (end_time - str_time))
    
        return inner
    
    @timmer
    def login():
        time.sleep(3)
        print('洗洗更健康...')
    # 在优化一下,让装饰器可以接受多个值,并且返回该函数的返回值。
    
    import time
    
    
    def timmer(f):
        def inner(*args, **kwargs):
            str_time = time.time()
            ret = f(*args, **kwargs)
            end_time = time.time()
            print('此函数执行时间为:%s' % (end_time - str_time))
            return ret
        return inner
    
    
    @timmer
    def login(a, b):
        time.sleep(3)
        print('洗洗更健康...%s, %s' % (a, b))
        return 666
  • 相关阅读:
    贪吃蛇模块划分
    你今天听见《风声》了吗“ 学习无处不在继潜伏后《风声》观后
    贪吃蛇结束条件分析
    CSS fieldset制作表单,抛弃Table
    两个路由器串联
    .net 几种获取路径方法
    C# 对文件与文件夹的操作 删除、移动与复制
    mvc3在IIS中的部署(转)
    HTTP 错误 500.21 Internal Server Error
    遗留问题
  • 原文地址:https://www.cnblogs.com/leonraw/p/9024019.html
Copyright © 2011-2022 走看看