python中的闭包函数中的闭包函数
闭包函数初探闭包函数初探
通常我们定义函数都是这样定义的
def foo():
pass
其实在函数式编程中,函数里面还可以嵌套函数,如下面这样
def foo():
print("hello world in foo")
def bar():
print("hello world in bar")
此时我们调用foo函数,执行结果会是什么样子的呢??
hello world in foo
结果如上所示,只会执行foo函数的第一层函数,bar函数是不会被执行的。为什么呢
实际上来说,不管函数写在哪个部分,那都只是定义了一个函数,只有这个函数被调用,函数内部的语句才会被执行
在上面的例子中,bar函数虽然在foo函数内部定义了,但是并没有被执行,所以bar函数是不会被执行的这样说来,定义在一
个函数内部的函数就没什么作用了吗??其实不是这样的。
来看下面的例子,把bar函数作为一个值返回给foo函数,来看执行过程
def foo():
print("hello world in foo")
def bar():
print("hello world in bar")
return bar
f1=foo()
print(f1)
此时,由于bar函数作为一个返回值被返回给了foo,所以foo函数执行结果是有返回值的
此时定义一个变量f1来接收foo函数的执行返回结果,然后打印f1
返回的结果如下
hello world in foo
<function foo.<locals>.bar at 0x0000000002941A60>
可以看到首先打印了foo函数中定义的一个print语句,接着打印的是foo函数中包含的bar函数的内存地址
既然是一个函数的内存地址,当然可以加括号来执行这个函数
def foo():
print("hello world in foo")
def bar():
print("hello world in bar")
return bar
f1=foo()
f1()
此时,这段代码的执行结果为:
hello world in foo
hello world in bar
两个print语句都被打印出来了。
在上面的例子里,首先定义了一个函数foo,接着在foo函数内部又嵌套定义了一个函数bar,然后返回函数bar的函数名,这就是