python-内部函数与闭包

在 Python 中,可以在函数中定义另外一个函数

内部函数

1
2
3
4
5
6
7
8
9
10
11
12
13
def outer1(a, b):
def inner():
return a + b # 使用外部函数变量
return inner() # 把内部函数调用结果返回
print outer1(1, 2)
# outer2 与 outer1 的区别在于内部函数一个有参数,一个没有参数,
def outer2(a, b):
def inner(x, y):
return x + y
return inner(a, b) #
print outer2(1, 2)

闭包

内部函数可以看作一个闭包。闭包是一个可以由另一个函数动态生成的函数,并且可以改变和存储函数外创建的变量的值。

1
2
3
4
5
6
7
8
9
def outer(name):
def inner():
return "Call %s" % name # 使用外部函数参数
return inner # 返回的是inner内部函数,并不是该函数的调用
a = outer('Zhangsan') ## a 是内部函数inner, 并没有调用该函数
b = outer('Lisi') ## b 是内部函数inner, 并没有调用该函数
print a() # 调用内部函数
print b() # 调用内部函数