python中使用闭包及修改外部函数的局部变量

Python012

python中使用闭包及修改外部函数的局部变量,第1张

在python中,函数可以被嵌套定义,也就是说,函数中可以定义函数。该函数还可以将其内部定义的函数作为返回值返回。

闭包的定义:一般来说,我们可以认为,如果一个函数可以读取其他函数中的局部变量,那么它们就构成了闭包。

注意 :闭包的定义不是特别清晰,但大体上的意思是这样的。

我们知道,普通的函数是可以使用全局变量的

类似的,函数中定义的函数,也是可以使用外部函数的变量的。因此,满足了函数读取了其他函数局部变量的这一条件,他们因此构成了闭包。

在闭包的使用中,我们可以先给外部的函数赋予不同的局部变量,然后再调用其中内部的函数时,就可以读取到这些不同的局部变量了。

外部变量的使用 在普通函数中,虽然可以直接使用全局变量,但是不可以直接修改全局变量。从变量的作用域来说,一旦你尝试修改全局变量,那么就会尝试创建并使用一个同名的局部变量。因此,如果你需要在普通函数中修改全局变量,需要使用global

同样的,如果你希望通过定义在内部的函数去修改其外部函数的变量,那么必须使用nonlocal

百度知道

inside和outside在python中的区别:

示例代码说明:

x = 0 # 全局变量

def outside(): # 定义函数

x = 1 # 局部变量,内嵌函数的外部变量

def inside(): # 定义内嵌函数

x = 2 # 局部变量

return x

return x, inside # 将变量值和函数返回

o, i = outside() # 通过两个变量接收outside函数的返回值x和inside

print(x) # 显示输出结果为:0

print(o) # 显示输出结果为:1

print(i()) # 显示输出结果为:2

刚才的这段代码。

在Python中可以在函数的内部再定义函数。

大家能够看到,在上方代码中函数outside的内部,又定义了一个函数inside。

这种结构就是函数嵌套。

另外,在上方代码中,大家能够看到函数的返回值不仅可以返回多个,而且可以返回内嵌函数(这是闭包,后面会讲到)。

返回内嵌函数时,如果函数名称后方没有加上“()”,调用外层函数时不会立即执行返回的函数,需要在调用外层函数后,添加“()”来执行。例如,上方代码最后一句中的“i()”,就是执行变量中保存的函数。

而且,我们也可以用下面这种方法去执行返回的函数。

函数嵌套。。一般提到这个有两个意思,有的语言运行函数嵌套那就是函数的嵌套,指在一个函数体里定义另一个函数,比如python

def outer():

name="python"

def inner():

print name

return inner()

有的语言不允许函数嵌套,那指的就是函数嵌套调用。比如c语言的

int a()

{

b()//调用函数b

}

递归的话就是自己调用自己

int a(int x){

if(x==5)return 0 //一定要有结束条件不然递归就爆内存的

x++

a(x)

}

调用函数

a(0) //那么递归过程是a(0)--->a(1)--->a(2)--->a(3)--->a(4)--->a(5)