|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 醉酒青牛 于 2015-9-22 21:15 编辑
小牛有话说:
各位鱼油,大家好。我是小牛,如果您已经看完或者正在看鱼神的《零基础入门学习Python》视频,想随时复习前面的知识点却又不想花太多时间和精力重翻视频,来这里《零基础入门Python学习》整理瞅瞅小牛呕心做的的视频内容的总结吧^_^,如果觉得有用的话,可以点击帖子右上角的“订阅”按钮,这样以后就能够随时看到小牛做的最新的整理了 。
本期主要内容导读:
这一期我们归纳一下鱼神第二十讲“函数:内嵌函数和闭包”。这一期里面鱼神主要是内嵌函数和闭包概念以及它们的作用和使用过程中需要注意的地方。下面我们就来详细介绍一下各个知识点吧~~~~~~
1. 如何在函数体内修改全局变量的值
上一讲提到过,在函数体内部无法直接修改全局变量的值,Python程序会自动将你在函数体内定义的变量生成为一个新的局部变量,仅是变量名和全局变量相同,由于作用域不同,你改变其值是无法影响到全局变量的值的,从而保护到了全局变量。但是如果你不想让这个变量被转换为一个新的局部变量,还是有办法的,就是先声明这个变量就是全局变量再修改它,其声明语句为global,举例说明:
>>> def myfun():
global num #将其声明为全局变量
num = 0.0
count = 0.0
print('函数体内部修改的num的值为',num)
print('函数体内部修改的count的值为',count)
>>> num = 10
>>> print(num)
10
>>> count = 5
>>> print(count)
5
>>> myfun()
函数体内部修改的num的值为 0.0
函数体内部修改的count的值为 0.0
>>> print(num)
0.0
>>> print(count)
5
2. 内嵌函数
内嵌函数指的是在一个函数体内部定义的函数,可以称它为函数的函数。这个时候就牵涉到了函数体内部变量作用域的问题了,为了区分这两个函数,在这里我们将内嵌函数称为子函数,而将其外部的函数称为母函数。与全局变量和局部变量的关系一样:子函数体内定义的变量只在其函数体内部有效,但其内部却可以引用母函数体内定义的变量,但是却仍无法直接修改母函数体内定义的变量,举例说明:
>>> def mother():
num = 1
print('在mother函数体内定义的num值为',num)
def son():
num = 3
print('son函数内定义的num值为',num)
son()
print('调用完son函数之后num的值为',num)
def girl():
print('在girl函数体内打印num的值为',num)
girl()
>>> num = 100
>>> print(num)
100
>>> mother()
在mother函数体内定义的num值为 1
son函数内定义的num值为 3
调用完son函数之后num的值为 1
在girl函数体内打印num的值为 1
>>> print('调用完mother函数之后num的值为',num)
调用完mother函数之后num的值为 100
3. 闭包
闭包是一种满足特定要求的内嵌函数。这里我们还是将内嵌函数称为子函数,其外部的函数称为母函数,则当子函数体内有对母函数体内定义的变量的引用时我们称这个子函数为一个闭包。但当母函数和其闭包都定义了参数时,由于在母函数体外是无法直接对闭包进行函数调用的,为了能够实现对闭包的调用,需要在母函数内增加一条返回闭包函数名本身的语句,这个时候调用母函数后返回的是一个闭包的函数对象,就可以通过这种方法间接调用闭包函数了,举例说明:
>>> def funx(x):
def funy(y): #这里面funy就是一个闭包
return x*y
return funy #直接返回闭包函数名
>>> i = funx(5) #返回过来的是一个函数对象赋值给了i
>>> i
<function funx.<locals>.funy at 0x0247CD68>
>>> type(i)
<class 'function'>
>>> i(8) #i可以直接进行函数调用了
40
当然也可以直接使用funx(5)(8)这种形式进行调用,和上述方式实现的结果一样。
4. 在内嵌函数内修改外部函数内定义的变量的值
前面已经讲过,无法直接在闭包内部对外部函数的变量进行修改,但是如果真的非要修改的话,在Python3里面是可以的,需要增加一条声明此变量是外部函数内变量的语句nonlocal,举例说明:
>>> def mother():
num = 0
print('在mother函数体内定义的变量num的值为',num)
def son():
nonlocal num
num = 100
print('在son函数内部定义的num变量值为',num)
son()
print('在调用完son函数以后,mother函数体内定义的变量num的值为',num)
>>> mother()
在mother函数体内定义的变量num的值为 0
在son函数内部定义的num变量值为 100
在调用完son函数以后,mother函数体内定义的变量num的值为 100
|
评分
-
查看全部评分
|