第020讲:函数:内嵌函数和闭包
0. 如果希望在函数中修改全局变量的值,应该使用什么关键字?
me:global
1.在嵌套的函数中,如果希望在内部函数修改外部函数的局部变量,应该使用什么关键字?
me:nonlocal
2.Python 的函数可以嵌套,但要注意访问的作用域问题哦,请问以下代码存在什么问题呢?
def outside(): print('I am outside!') def inside(): print('I am inside!') inside()
me:在全局的作用域中是不能调用函数体内的函数
3.请问为什么代码 A 没有报错,但代码 B 却报错了?应该如何修改?
A代码
def outside(): var = 5 def inside(): var = 3 print(var) inside() outside()
B代码
def outside(): var = 5 def inside(): print(var) var = 3 inside() outside()
me:如果函数内部有对变量的赋值 ,则该变量被认为是本地的,此时可以正常修改。但是若变量不定义在函数内部,且没有进行变量范围的声明(去调用外部变量),程序在函数内部找不到相应变量,所以会出现未定义变量的错误提示消息。
4.请问如何访问 funIn() 呢?
def funOut(): def funIn(): print('宾果!你成功访问到我啦!') return funIn()
me:funout()
5.请问如何访问 funIn() 呢?
def funOut(): def funIn(): print('宾果!你成功访问到我啦!') return funIn
me:funout()()
6.以下是“闭包”的一个例子,请你目测下会打印什么内容?
def funX(): x = 5 def funY(): nonlocal x x += 1 return x return funY a = funX() print(a())
me:6