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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。