在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()”,就是执行变量中保存的函数。
而且,我们也可以用下面这种方法去执行返回的函数。
函数嵌套。。一般提到这个有两个意思,有的语言运行函数嵌套那就是函数的嵌套,指在一个函数体里定义另一个函数,比如pythondef 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)