• 第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

  • 相关阅读:
    菜鸟系列k8s——快速部署k8s集群(3)
    菜鸟系列docker——docker容器(7)
    菜鸟系列Fabric源码学习 — 区块同步
    菜鸟系列Fabric源码学习 — peer节点启动
    菜鸟系列Fabric源码学习 — orderer服务启动
    递归科赫雪花
    汉诺塔递归函数hanoi
    字符串格式化与.format()
    turtle风轮绘制
    接口签名2
  • 原文地址:https://www.cnblogs.com/kugua7878445/p/11845718.html
Copyright © 2020-2023  润新知