python嵌套函数

也叫内部函数


嵌套函数里面两个重要的概念:变量作用域和函数闭包

1. 变量作用域
   内部函数可以直接读取访问外部函数变量,但是不能修改;访问规则是从内到外函数逐级寻找变量
#!/usr/bin/env python

def outer(a):
    i = a + 1
    def inner():
        j = i + 1
        def innest():
          print "innest: i=%d,j=%d" % (i, j)
        innest()
    inner()

outer(1)

$ python t.py
innest: i=2,j=3


三级函数,innest可以访问inner的变量,也可以访问outer的变量,但是均不能修改他们。(如何才能修改,我也不知道,但是python 3提供机制修改)

2. 函数闭包

#!/usr/bin/env python

def outer(a):
    i = a + 1
    def inner():
        print "inner: i=%d" % i
    return inner

foo = outer(1)
foo()

$ python t.py
inner: i=2


聪明的程序员立马就有疑问了,为什么foo()还能正常执行呢,outer函数已经执行完毕退出了啊,其中的参数a和内部变量i怎么还能被foo使用呢,答案很简单这就是闭包的概念,请自行搜搜关键字:python 闭包

你可能感兴趣的:(python)