当前位置: 首页 > news >正文

网站建设 方案 评价表网站设计模板代码

网站建设 方案 评价表,网站设计模板代码,最近营销热点,可以做早安图片的网站Python嵌套函数(Nested function)和闭包(closure) 闭包(closure)是建立在嵌套函数基础上的,是一种特殊的嵌套函数结构。 先看嵌套函数(Nested function)。 Python允许…

Python嵌套函数(Nested function)和闭包(closure)

闭包(closure)是建立在嵌套函数基础上的,是一种特殊的嵌套函数结构。

先看嵌套函数(Nested function)。

Python允许函数的嵌套定义,即在函数体中可以定义函数,内部的函数为嵌套函数(nested function),也叫内部函数(inner function)。

为了执行内部函数,必须调用外部函数。 如果不调用外部函数,内部函数将永远不会执行。不能直接调用内部函数,需要先调用外部函数,在调用内部函数,否则出错。

下面给出一个嵌套函数的示例源码:

def outer(x):	# 外部函数print("outer的x:{}".format(x))def inner(y):  # 内部函数print("inner的y:{}".format(y))print("x+y={}".format(x+y))inner(8)     #调用内部函数outer(20)  # #调用外部函数

运行测试如下:

典型的闭包(closure)结构

就是在一个外部函数中定义了一个内部函数,内部函数使用了外部函数的局部变量,并且外部函数的返回值是内部函数,这样就构成了一个闭包。

典型的闭包格式的描述:

 def 外层函数():
    外层局部变量
    def 内层函数():
        引用外层函数的局部变量

return 内层函数

将上例嵌套函数修改成闭包结构源码如下:

def outer(x):	# 外部函数print("outer的x:{}".format(x))def inner(y):	# 内部函数print("inner的y:{}".format(y))return x + y	# 访问外部函数的参数——这里是xreturn inner    	# 通过返回内部函数,实现外部引用——inner后没有括号()n = outer(20)	# 调用外部函数并传参,获取引用内部函数
m=n(8)	# 调用内部函数inner(y)并传参,原外部函数的参数继续存在
print(m)

运行测试如下:

一般而言,调用一个函数是加一个括号。

如果看见函数括号后还有一个括号,说明第一个函数(外部函数)返回了一个函数(内部函数),前面的括号是外部函数的,后面的括号是内部函数的。

现在,修改上面闭包结构源码调用部分:

def outer(x):	# 外部函数print("outer的x:{}".format(x))def inner(y):	# 内部函数print("inner的y:{}".format(y))return x + y	# 访问外部函数的参数——这里是xreturn inner    	# 通过返回内部函数,实现外部引用——inner后没有括号()k=outer(20)(8)
print(k)

运行测试如下:

一般情况下,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。

但是闭包是一种特殊情况,如果外部函数在结束的时候发现有自己变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数。

判断函数是否为闭包

可以通过__closure__ 属性来判断,返回的是一个元组,每一项都是闭包函数引用的外部变量,可以通过cell_contents 将被引用的变量打印(显示)出来。cell_contents解释了局部变量在脱离函数后仍然可以在函数之外被访问的原因,因为变量被存储在cell_contents中了。

示例源码如下,请留意__closure__、cell_contents的使用:

def outer(x):	# 外部函数def inner(y):	# 内部函数return x 	# 注意这里:将return x 改为 return y 再运行试试看return inner    	# inner后没有括号()n = outer(20)	# 调用外部函数#查看 __closure__ 的值
print(n.__closure__)#通过cell_contents 将被引用的变量打印出来
for line in n.__closure__:
print(line.cell_contents)

运行测试如下:

由此可知,闭包的特点是返回的函数还引用了外层函数的局部变量。

理解清楚闭包这个概念,对于理解 Python 中的一大利器“装饰器”有很大的帮助。因为装饰器本身就是闭包的一个应用。Python装饰器(Decorator)https://www.cnblogs.com/BlueSkyyj/p/8884245.html

 

进一步了解

python中闭包详解https://zhuanlan.zhihu.com/p/341376218
Python闭包(Closure) https://www.cnblogs.com/BlueSkyyj/p/8884236.html
嵌套函数和闭包https://zhuanlan.zhihu.com/p/152408838

http://www.yayakq.cn/news/63004/

相关文章:

  • 广东石油化工建设集团网站画网站 模板
  • 宁波高端网站建设公司嘿客免费网站建设
  • 青岛网站建设官网关于网站建设的合同范本正规
  • 东莞网站建站推广贵阳做网站好的公司有哪些
  • 黄山网站建设哪家强企业建站的作用是什么
  • 太原网站制作维护电商网站建设案例
  • php网站怎么做post订单网站开发顺序
  • 网站建设技术网站建设浙江十大外贸公司排名
  • wordpress建电商网站企业注册登记
  • 绵阳住房和城乡建设厅官方网站公司静态网站模板
  • 防伪查询网站网站域名每年费用
  • 爱做的小说网站一般云主机可以做视频网站吗
  • 论述网站建设的步骤小说在线阅读网站怎么做
  • 抽奖网站插件wordpress资源下载
  • 青岛模板化网站wordpress 获取文件路径
  • 大连专业模板网站制作公司关于港口码头发展建设的网站
  • 厦门市建设工程在哪备案网站网站开发团队奖惩
  • 网站建设包含seo吗4米高挡土墙模板加固
  • 网站开发公司小程序开发免费房屋装修设计
  • 网站与后台东莞哪里能学建设网站
  • 青岛做网站建设手机网站开发技术pdf
  • 42区 网站开发指南wordpress 如何上传
  • 建站快车怎么样建筑业务网站建设
  • 温州网站建设大全自己如何创建一个网站
  • 阳泉建设网站的公司seo去哪里培训
  • 做网站怎么做鼠标跟随电子图书网站建设
  • 专业做网站企业广东省农业农村厅陈宗云
  • wordpress文章页面修改seo英文全称
  • 买布做衣裳 在哪个网站买好做高仿鞋子在什么网站卖好
  • 网站资源如何做参考文献百度收录