python中闭包必须存在于什么关系的函数中,通俗易懂解释python闭包

  python中闭包必须存在于什么关系的函数中,通俗易懂解释python闭包

  本文主要介绍Python函数对象和闭包。函数对象是指可以被当作‘数据’的函数,可以用在四个方面。下面就来看看这四个实用的方法,有需要的朋友可以参考一下。

  00-1010一个函数对象1.1函数可以被引用1.2函数可以作为容器类型的元素1.3函数可以作为参数传入另一个函数1.4函数的返回值可以是函数2闭包函数2.1闭包和包的目的2.2闭包。

  

目录

  对象是指一个函数可以被当作‘数据’,可以用在四个方面。

  

一 函数对象

  def add(x,y):

  .返回x y

  .

  func=添加

  func(1,2)

  三

  

1.1 函数可以被引用

  dic={add:add, max:max}

  (油)密度指示控制器(Density Indicating Controller的缩写)

  {add:函数add at0x100661e18, max:内置函数max}

  dic[add](1,2)

  三

  

1.2 函数可以作为容器类型的元素

  def foo(x,y,func):

  .返回函数(x,y)

  .

  foo(1,2,add)

  三

  

1.3 函数可以作为参数传入另外一个函数

  定义栏():

  .返回添加

  .

  func=bar()

  func(1,2)

  三

  

1.4 函数的返回值可以是一个函数

  

二 闭包函数

  基于函数对象的概念,函数可以返回到任意位置被调用,但作用域关系在定义函数时就已经确定,与函数的调用位置无关。

  x=1

  定义f1():

  定义f2():

  打印(x)

  返回f2

  def f3():

  x=3

  F2=f1() #调用f1()返回函数F2

  F2() #需要在定义函数时根据函数关系执行,不考虑调用位置。

  F3() #结果是1

  也就是说,当一个函数被当作数据时,它自己的作用域将永远占优势。如果一个嵌入函数包含一个对外部函数作用域(而不是全局作用域)中变量的引用,那么这个‘嵌入函数’就是一个闭包函数,简称为闭包。

  x=1

  定义外部():

  x=2

  内部定义():

  打印(x)

  返回内部

  func=outer()

  Func() #结果是2

  可以通过函数的__closure__属性查看闭包函数包装的外部变量。

  func。__关闭_ _

  (0x10212af78: int对象0x10028cca0处的单元格,)

  func。__closure__[0]。单元格内容

  2

  “封闭的”意味着函数是内部的,“包装的”意味着对外部范围的引用被“包装”在函数之外。因此,无论在哪里调用闭包函数,仍然使用包装在其外层的变量。

  

2.1 闭与包

  到目前为止,我们得到了两种将值传递给函数体的方法,一种是直接将值作为参数传递,另一种是将值打包传递给函数。

  导入请求

  #方法1:

  定义获取(url):

  返回requests.get(url)。文本

  #方法2:

  定义页面(url):

  def get():

  返回requests.get(url)。文本

  返回获取

  提示:请求模块用于模拟浏览器向网站发送请求,并在本地下载页面内容,需要提前安装:pip3安装请求。

  比较两种方法,第一种方法在下载同一个页面时需要重复传入url,而第二种方法只需要传入一次值,就会得到一个包含指定url的闭包函数,调用闭包函数后就不需要再传url了。

  #方法1下载相同的页面

  get(https://www.python.org )

  get(https://www.python.org )

  get(https://www.python.org )

  ……

  #方法2下载相同的页面

  python=page( https://www . python . org )

  python()

  python()

  python()

  ……

  闭包函数的这种特性有时被称为懒惰计算。将值包装到函数中的方式在下面的decorators中也会有很大用处。

  这就是这篇关于Python函数对象和闭包的文章。关于Python函数对象和闭包的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望你以后能支持热门的IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: