zoukankan      html  css  js  c++  java
  • 嵌套函数局部变量修改问题

    今天在写一个简单的嵌套函数时,需要在f2()中修改上层函数f1()的局部变量

    def f1():
        i=1
        def f2():
            i=i+1 
        return f2()
    

    程序报错

    UnboundLocalError: local variable 'i' referenced before assignment

    一查,大概是局部变量作用域的问题

    f2 在 f1 之内,其作用域的范围等同于闭包,因此 x 实际上是在父函数 f1的作用域内,f2调用它类似于 f1调用全局变量,只能读取而不能直接改写 x。

    但是如果你使用列表对象的 x,则 x[0] 并非 x对象 ,而是 x 的元素,因此可以被改写。

    def f1():
        i=[1]
        def f2():
            i[0]=i[0]+1
        return f2()
    

    其实这是 python 2 的一个bug,在 python 3 中引入了 nonlocal语句,其类似于 global 语句,只不过是用来声明某个变量是父函数的那个变量,以便于子函数可以直接改写该变量。

    在python 2 中,只有用列表对象了,不过在 python 3 中可以这么写:

    def f1():
        i=1
        def f2():
            nonlocal i      #加上这一句声明这里的 i 是父函数的 i,之后便可以直接改写 i
            i=i+1
    
  • 相关阅读:
    IfcAxis2Placement3D
    IfcAxis2Placement2D
    IfcAxis1Placement
    realsense 深度数据
    realsense 深度数据
    realsense 深度数据
    sudo fdisk -l
    temviewer历史版本
    100/9801
    IfcPlacement
  • 原文地址:https://www.cnblogs.com/velscode/p/10592793.html
Copyright © 2011-2022 走看看