• 2019.08.12学习整理


    2019.08.12学习整理

    闭包函数

    1.什么是闭包

    闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用)。闭包指的是:函数内部函数对外部作用域而非全局作用域的引用。

    两种为函数传参的方式

    为函数传参的方式一:使用参数的形式

    def func(x):
        print(x)
    
    
    func(1)
    func(1)
    func(1)
    

    1
    1
    1

    为函数传参的方式二:包给函数

    def outter(x):
        x = 1
    
        def inner():
            print(x)
        return inner
    
    
    f = outter(1)
    f()
    f()
    f()
    # 查看闭包的元素
    print(F"f.__closure__[0].cell_contents: {f.__closure__[0].cell_contents}")
    

    1
    1
    1
    f.closure[0].cell_contents: 1

    2.闭包函数的应用

    闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域。

    应用领域:延迟计算(原来我们是传参,现在我们是包起来)、爬虫领域。

    装饰器

    什么是装饰器

    装饰器指的是为被装饰器对象添加额外功能。因此定义装饰器就是定义一个函数,只不过该函数的功能是用来为其他函数添加额外的功能。

    需要注意的是:

    • 装饰器本身其实是可以任意可调用的对象
    • 被装饰的对象也可以是任意可调用的对象

    装饰器的实现必须遵循两大原则

    1. 不修改被装饰对象的源代码
    2. 不修改被装饰对象的调用方式

    装饰器语法糖

    在被装饰函数正上方,并且是单独一行写上@装饰器名

    装饰器模板

    def deco(func):
        def wrapper(*args,**kwargs):
            res = func(*args,**kwargs)
            return res
        return wrapper
    

    迭代器

    迭代器:迭代的工具。迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的。如计算机中的迭代开发,就是基于软件的上一个版本更新。以下代码就不是迭代,它只是单纯的重复

    可迭代对象

    python中一切皆对象,如

    x = 1
    name = 'nick'
    lis = [1, 2]
    tup = (1, 2)
    dic = {'name': 'nick'}
    s1 = {'a', 'b'}
    
    
    def func():
        pass
    
    
    f = open('49w.txt', 'w', encoding='utf-8)
    

    对于这一切的对象中,但凡有__iter__方法的对象,都是可迭代对象。

    迭代器对象

    迭代器对象的概念:可迭代的对象执行__iter__方法得到的返回值。并且可迭代对象会有一个__next__方法。

    for循环原理

    for循环称为迭代器循环,in后必须是可迭代的对象。

    lis = [1, 2, 3]
    for i in lis:
        print(i
    

    1
    2
    3

    总结:

    迭代器对象:执行可迭代对象的__iter__方法,拿到的返回值就是迭代器对象。

    特点:

    1. 内置__next__方法,执行该方法会拿到迭代器对象中的一个值
    2. 内置有__iter__方法,执行该方法会拿到迭代器本身
    3. 文件本身就是迭代器对象。

    缺点:

    1. 取值麻烦,只能一个一个取,并且只能往后取,值取了就没了
    2. 无法使用len()方法获取长度
  • 相关阅读:
    python学习之关于变量与内存的问题
    [题解]GDUT 2020年11月赛DE题
    【转】关于Oracle默认用户名system密码不正确登录不上解决方案
    [转载] Monitor Tools
    java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getAsyncContext()Ljavax/servlet/AsyncContext;
    【SSM】Result Maps collection already contains value for crud.dao.EmployeeMapper.BaseResultMap
    EL表达式失效,页面取不到数据
    处理回归BUG最佳实践
    固定QPS压测初试
    Java字符串到数组的转换--最后放大招
  • 原文地址:https://www.cnblogs.com/zhangmingyong/p/11340953.html
Copyright © 2020-2023  润新知