• Python学闭包函数和装饰器


    闭包函数

    定义:

    1.出现函数的嵌套定义。

    2.嵌套函数引用了外层函数第一的变量。

    3.外层函数返回嵌套函数。

    什么是闭包函数:

    所谓的闭包函数,其实采用了函数的嵌套的语法实现。通过外层传入的参数内层调用处理,然后外层返回内层函数

    闭包函数语法:

    def outter(func): #双层的模板
    	def inner(*args,**kwargs):
    		#加功能
    		res=func(*args,**kwargs)
    		return res
    	return inner
    

    闭包函数所需要满足一定的条件

    1.必须使用嵌套函数

    2.内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量—内部函数引用外部变量

    3.外部函数必须返回内嵌函数—必须返回那个内部函数

    闭包函数的作用:

    可以用来作为一个函数的装饰器

    装饰器

    定义:

    装饰器,顾名思义,就是装饰,修饰别的对象的一种工具。

    所以装饰器可以是任意可调用的对象,被装饰的对象也可以是任意可调用对象

    作用:

    在不修改被装饰对象的源代码以及调用方式的前提下为被装饰对象添加新功能

    举例

    import time
    
    def index():
        print('hello index')
        time.sleep(1)	# 检测index的运行的时间,但是不能改变index的调用方式,以及index的源码
    
    # 写一个装饰器
    def deco(func):  # func = 真正的index
        """装饰器"""
        def f1():  # 重新创建的index
            start = time.time()
            func()  # 真正的index()
            end = time.time()
            print(end-start)
        return f1
    
    
    aaa = deco(index)  
    aaa() 
    

    其实如果觉得上述方法太过于麻烦,我们也可以使用语法糖的方法来简化代码

    import time
    
    # 写一个装饰器
    def deco(func):  # func = 真正的index
        """装饰器"""
        def f1():  # 重新创建的index
            start = time.time()
            func()  # 真正的index()
            end = time.time()
            print(end-start)
        return f1
    @deco		#语法糖
    def index():
        print('hello index')
        time.sleep(1)	# 检测index的运行的时间,但是不能改变index的调用方式,以及index的源码
        
    index()
    

    迭代器

    什么是迭代器:

    迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

    迭代对象:

    可迭代:文件,列表,字典,元组,字符串,set集合

    不可迭代:数字类型,函数

    如何判断是否为可迭代对象

    通过使用内置方法

    __next__()
    __iter__()
    iter()
    

    可用于for循环的也叫做迭代对象

    小结:

    凡是可作用于for循环的对象都是Iterable类型;

    凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

    集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

    Python的for循环本质上就是通过不断调用next()函数实现的

    三元表达式:

    条件成立时的返回值 if 条件 else 条件不成立时的返回值

    x = 10
    y = 20
    
    print(f"x if x > y else y: {x if x > y else y}")
    x if x > y else y: 20
    
  • 相关阅读:
    vim的强大,vim设置和插件的使用,脱离windows才是王道
    [VS2013]如何闪开安装VS2013必须要有安装IE10的限制
    常用客户端实现逻辑
    开源控件ViewPagerIndicator学习
    常用设计模式
    主题演讲:未来新趋势电动车
    你最美好的年华
    一度总结
    android线程池ThreadPoolExecutor的理解
    Touch事件or手机卫士面试题整理回答(二)
  • 原文地址:https://www.cnblogs.com/ledgua/p/11340939.html
Copyright © 2020-2023  润新知