在函数体内创建另外一个函数(对象)是完全合法的,这种函数叫做内嵌函数。
最明显的创建内嵌函数的方法是在外部函数的定义体内定义函数(使用def())
>>> def foo():
def a():
print('a() called')
print("foo() called")
a()
运行如上代码会得到如下输出:
>>> foo()
foo() called
a() called
>>> a()
Traceback (most recent call last):
File "<pyshell#332>", line 1, in <module>
a()
TypeError: 'str' object is not callable
内部函数一个有趣的方面在于整个函数体都在外部函数的作用域之内。
如果没有任何对a()的外部引用,那么除了在函数体内,任何地方都不能对其进行调用,这就是上面代码执行到最后你看到异常的原因。