内嵌函数:
Python支持函数的嵌套,在函数里面定义的函数,无法在外部被调用。
闭包:
如果在一个内部函数里,对外部作用域(但不是全局作用域)的变量进行引用,那么函数就被认为是闭包。
(在Python里,所有东西都是变量,可以将函数直接返回。)
#eg1:
def FunX(x):
def FunY(y):
return x*y
return FunY
i = FunX(8)
i → <fun ……> #返回函数,没给y的值
type(i) → <class 'function'>
i(5) → 40
#或者
FunX(8)(5) → 40
FunY(5) → 报错
#eg2:
def Fun1():
x = 5
def Fun2():
x* = x
return x
return Fun2
#Fun1()→ 返回函数
#Fun1()()→ 报错
#第一个没错是因为return Fun2即返回函数,没有执行里面的操作,要fun1()()才执行
#闭包中不能修改外部作用域的局部变量,所以报错。
容器:字符串、列表啥都可以往里扔的叫容器类型。
def Fun1():
x=[5]
def Fun2():
x[0] * = x[0]
return x[0]
return Fun2()
Fun1() → 25
(对于列表类型,函数可以直接使用全局列表而不需要采用上节课所说的global声明)
关键字 nonlocal
def Fun1():
x = 5
def Fun2():
nonlocal x
x* = x
return x
return Fun2()