首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python学习笔记

20节

函数,内嵌函数和闭包

1、如何在函数体内修改全局变量的值

在函数体内部无法直接修改全局变量的值,Python程序会自动将你在函数体内定义的变量生成为一个新的局部变量,仅是变量名和全局变量相同,由于作用域不同,你改变其值是无法影响到全局变量的值的,从而保护到了全局变量。但是如果你不想让这个变量转换为一个新的局部变量,还是有办法的,就是先声明这个变量就是全局变量在修改它,其声明语句为global,例如:

加上global后:

2、内嵌函数

内嵌函数指的是在一个函数体内部定义的函数,可以称它为函数的函数。这个时候就牵涉到了函数体内部变量作用域的问题了,为了区分这两个函数,在这里我们将内嵌函数称为子函数,而将其外部的函数称为母函数。与全局变量和局部变量的关系一样:子函数体内定义的变量只在其函数体内部有效,但其内部却可以引用母函数体内定义的变量,但是却仍无法直接修改母函数体内定义的变量,例如:

3、闭包

闭包是一种满足特定要求的内嵌函数,这里我们还是将内嵌函数称为子函数,其外部的函数称为母函数,则当子函数体内有对母函数体内定义的变量的引用时,我们称这个子函数为一个闭包。但当母函数和其闭包都定义了参数时,由于在母函数体外是无法直接对闭包进行函数调用的,为了能够实现对闭包的调用,需要在母函数体内增加一条返回闭包函数名本身的语句,这个时候调用母函数后返回的是一个闭包的函数对象,就可以通过这种方法间接调用闭包函数了,例如:

4、在内嵌函数内修改外部函数内定义的变量的值

前面已经讲过,无法直接在闭包内部对外部函数的变量进行修改,但是如果真的非要修改的话,在Python3里面是可以的,需要增加一条声明此变量是外部函数内变量的语句nonlocal,例如:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180419G0S8MB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券