python函数中闭包的概念说明

函数中闭包的概念说明

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

判断闭包方法 ._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())

原文地址:https://www.cnblogs.com/liujiyu/p/9105768.html

时间: 2024-10-24 22:15:06

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

python函数中的默认参数问题

Python 函数中,参数的传递本质上是一种赋值操作 def foo(arg): arg = 2 print(arg) a = 1 foo(a) # 输出:2 print(a) # 输出:1 def bar(args): args.append(1) b = [] print(b)# 输出:[] print(id(b)) # 输出:4324106952 bar(b) print(b) # 输出:[1] print(id(b)) # 输出:4324106952 def foo(x, a_list=

python函数中的参数类型

python函数中的参数 python的函数类型详解

Python函数中的可变长参数_速记

一.Python函数中的参数 1.使用python的函数时,有参数类别,比如位置参数.关键字参数.可变长参数 2.位置参数.关键字参数很好理解,关键是可变长参数经常能见到,但是一直没有搞懂是什么意思 二.可变长参数 1.一个星号:函数可以接收任意个数的参数,只需要在形参前面加一个*(星号),一个星号形参的函数会把多个位置参数值当成元祖的形式传入,也就是传入的多个参数值可以在函数内部进行元祖遍历 def length_param(a, *args): print("a=", a) pri

Python函数中的必选/默认/可变/关键字/命名参数

Python函数中的必选/默认/可变/关键字/命名参数 一.默认参数 def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return s n为默认参数,直接赋值 默认参数设置的两个注意事项: 1.必选参数在前,默认参数在后,否则会报错 2.当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面.变化小的参数就可以作为默认参数. 二.可变参数 在python中,如果我们需要传入不确定数目的参数,就可以利用可变参数 def ca

Javascript 中闭包的概念

一直再说闭包闭包,其实自己一直不懂闭包是个什么意思,今天,上百度找了找闭包的相关资料,参考整理了下,希望以后能用得着: 闭包其实是javascript语言中的一个难点,也是该语言的一个特色,据说很多高级应用都需要闭包的支持: 先理解下下面的几个概念: 1.变量的作用域 javascript中声明变量使用var 关键字,稍微了解的同学都知道,加了var关键字声明的变量是局部变量,反之则为局部变量 例如: var text = 'hello';   局部变量 text = 'world'; 全局变量

python函数中参数是如何传递的?

python中一切皆对象,函数中参数传递的是对象的引用. 1在函数中改变变量指向的对象,即指向不同对象. 当在函数中修改传递进来的变量指向另一个对象时,实参的对象不会改变. >>> def fun(num,l,d): ... num=123; ... l=[1,2,3] ... d={'a':123} ... print("inside:","num=%f,l=%s,d=%s"%(num,l,d)) ... >>> num=1 &

Python函数中的变量和函数返回值

1.函数的变量 局部变量和全局变量: Python中的任何变量都有特定的作用域 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量. def fun(): x=100 print x fun() x = 100 def fun(): global x   //声明 x +=1 print x fun() print x 外部变量被改: x = 100 de

Python函数中的变量和函数返回值的使用实例

1.函数的变量 局部变量和全局变量: Python中的任何变量都有特定的作用域 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量. def fun(): x=100 print x fun() x = 100 def fun(): global x //声明 x +=1 print x fun() print x 外部变量被改: x = 100 def

python函数中参数的传递

Python唯一支持的参数传递方式是『共享传参』(call by sharing)多数面向对象语言都采用这一模式,包括Ruby.Smalltalk和Java(Java的引用类型是这样,基本类型按值传递)共享传参是指函数的各个形式参数获得实参中各个引用的副本:也就是说,函数内部的形参是实参的别名(alias)这种方案的结果是,函数可能会修改作为参数传入的可变对象,但是无法修改那些对象的标识(即不能把一个对象替换为另一个对象. 1 >>> def fun(num,l,d): 2 ... nu