第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

原文地址:https://www.cnblogs.com/kugua7878445/p/11845718.html