函数中闭包的概念说明

闭包:
  内层函数对外层函数非全局变量的引用,就叫做闭包

判断闭包方法 ._closure_ :

  执行后返回有效信息就是闭包,返回none就不是闭包

    举例1: 是闭包
      def wrapper():
      name = 'alex'
      def inner():
      print(name)
      inner()
      print(inner.__closure__) #(<cell at 0x006121D0: str object at 0x00227380>,)
      wrapper()
    结果:

      alex
      <cell at 0x006121D0: str object at 0x00227380>

  
    举例2: 不是闭包
      name = 'alex'

      def wrapper():
      def inner():
      print(name)
      inner()
      print(inner.__closure__) # None
      wrapper()
    结果:
      alex
      None

闭包的作用:

  闭包的特殊机制:
    python解释器遇到了闭包,闭包一个特殊机制是闭包不会随着函数的结束而释放。即函数运行完成后这个闭包的临时空间不会释放。
    或者说函数结束后,该函数向上层引用的非全局变量仍然还是存在的不会被清空。
    引用的非全局变量不关闭,仍在内存中,再次使用时候直接从该内存里调用。

  闭包的用途:
    爬虫
    装饰器

      爬虫举例:
        def index():
        url = "http://www.xiaohua100.cn/index.html"
        def get():
        return urlopen(url).read()
        return get

        xiaohua = index() # get
        content = xiaohua()
        content1 = xiaohua()
        content2 = xiaohua()
        print(content.decode())

python函数中闭包的概念说明的更多相关文章

  1. Python 函数中,参数是传值,还是传引用?

    在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...

  2. python 函数中使用全局变量

    python 函数中如果需要使用全局变量,需要使用 global + 变量名 进行声明, 如果不声明,那么就是重新定义一个局部变量,并不会改变全局变量的值 n [1]: a = 3 In [2]: d ...

  3. Python函数中的可变参数

    在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...

  4. python函数中把列表(list)当参数时的"入坑"与"出坑"

    在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑!! 入坑 def f(x,li=[]): for i in range(x): li.append(i*i ...

  5. Python函数中参数类型

    在学习Python函数的时候,函数本身的定义和调用并不是很复杂,但是函数的参数类型和用法的确有些复杂.在此做一个小结,加深理解. Python参数的定义 负责给函数提供一些必要的数据或信息,以保证函数 ...

  6. python函数中的参数类型

    python函数中的参数 动态获取函数的参数 python的函数类型详解

  7. 一道题带你搞定Python函数中形参和实参问题

    昨天在Python学习群里有位路人甲问了个Python函数中关于形参和实参一个很基础的问题,虽然很基础,但是对于很多小白来说不一定简单,反而会被搞得稀里糊涂.人生苦短,我用Python. 为了解答大家 ...

  8. 第十七篇 Python函数之闭包与装饰器

    一. 装饰器 装饰器:可以拆解来看,器本质就是函数,装饰就是修饰的意思,所以装饰器的功能就是为其他函数添加附加功能. 装饰器的两个原则: 1. 不修改被修饰函数的源代码 2. 不修改被修饰函数的调用方 ...

  9. javascript中闭包的概念

    这个是每个前端工程师绕不开的一个问题,网上各种资料很多,整个春节,我仔细研读了红皮经典中关于这一块的注释,加深了对这一块的理解. 有好几个概念需要重申一下.以下都是我的理解: 1. 闭包是javasc ...

随机推荐

  1. Python爬虫教程-28-Selenium 操纵 Chrome

    我觉得本篇是很有意思的,闲着没事来看看! Python爬虫教程-28-Selenium 操纵 Chrome PhantomJS 幽灵浏览器,无界面浏览器,不渲染页面.Selenium + Phanto ...

  2. Qt判断鼠标在控件上

    QT判断鼠标是否在某子窗口控件上方 需要注意的是,子窗口获取geometry,是相对于父窗口的相对位置,QCursor::pos()获取的是鼠标绝对位置,要不将父窗口的相对位置进行换算,要不将鼠标的绝 ...

  3. Java通过jna调用c++动态库

    1 环境准备 操作系统:windows 10,x64 jna,jna-4.4.0.jar c++开发环境,vc2013 java开发环境,eclipse,jdk8 2 dll开发 通过vc2013创建 ...

  4. 新开篇关于vue

    参考链接:http://cn.vuejs.org/v2/guide/instance.html 了解vue组件的生命周期: 1.beforeCreate 即将创建 2.created 创建 3.bef ...

  5. zookeeper & kafka 集群

    http://cloudurable.com/blog/kafka-architecture/index.html 静态解析 cat >> /etc/hosts << EOF ...

  6. [Errno 14] problem making ssl connection Trying other mirror.

    使用yum安装程序,报错 解决方法: 我的是升级了下curl就可以了   yum update curl

  7. Bash命令行 bash &> >& Bash One-Liners Explained

    Bash One-Liners Explained, Part I: Working with files https://catonmat.net/bash-one-liners-explained ...

  8. Oracle日常性能查看

    判断回滚段竞争的SQL语句:(当Ratio大于2时存在回滚段竞争,需要增加更多的回滚段)select rn.name, rs.GETS, rs.WAITS, (rs.WAITS / rs.GETS) ...

  9. (名词 形容词 动词 副词)重读&(冠词 介词 连词 代词 辅助词(Be))弱读

    二,一些发音规则 除了上面的练习之外,这里还有几个注意点需要我们有足够的认识,那就是英语有重读.弱读.连读.爆破.语感(节奏和断句)等(其实当你跟读并背诵新概念之后,这一切都是神马,你不知觉地也会发现 ...

  10. 一些SAP Partners能够通过二次开发实现打通C/4HANA和S/4HANA的方法介绍

    有好几位朋友在公众号后台给我留言询问SAP C/4HANA和S/4HANA集成的方案. 尽管我给这些朋友推送了一个方案:打通C/4HANA和S/4HANA的一个原型开发:智能服务创新案例,然而我得到的 ...