Python支持在函数体内定义函数,这种在函数体内被定义的函数称为局部函数。 在默认情况下,局部函数对外部是隐藏的,局部函数只能在其封闭函数内有效,其封闭函数也可以返回局部函数,以便程序在其他作用域中使用局部函数。例如: 如果封闭函数没有返回局部函数,那么局部函数只能在封闭函数内部调用。 还有一种情况,如果封闭函数将局部函数返回,且程序使用变量保存了封闭函数的返回值,那么这些局部函数的作用域会被扩大,因此程序完全可以自由的调用它们,就像他们是全局函数一样。
局部函数内的变量也会遮蔽它所在函数内的局部变量。例如:
该错误是由局部变量遮蔽全局变量导致的,在bar()函数中定义的name局部变量遮蔽了它所在foo()函数的name局部变量。
Python提供了nonlocal关键字,通过nonlocal语句即可声明访问赋值语句只是访问该函数所在函数内的局部变量。
nonlocal关键字和global关键字的区别: global用于声明访问全局变量,nonlocal用于声明访问当前函数所在函数内的局部变量。