【问题标题】:Python Nested Function Variable Assignment [duplicate]Python嵌套函数变量赋值[重复]
【发布时间】:2013-03-31 08:19:54
【问题描述】:

我正在尝试在 python3 中按照以下几行做一些事情:

i = 1337
def g():
    print(i)
    i = 42
g()

但出现以下错误

UnboundLocalError: local variable 'i' referenced before assignment

我想我理解错误消息的含义,但为什么会这样?有什么办法可以规避吗?

【问题讨论】:

标签: python


【解决方案1】:

简而言之 - 当给定的变量名称未在函数中分配值时,将查找对该变量的引用。使用 global - 在这种情况下,python 将在全局范围内查找 i:

i = 1337

def g():
    global i
    print i
    i = 42

g()

您可以在variable scopes in PEP-0227上阅读更多内容

【讨论】:

    【解决方案2】:

    如果你真的想这样做,你需要从全局范围中获取 i。

    def g():
        global i
        print i
        i = 42
    

    但是,通常您最好将代码的工作方式更改为不需要全局变量。根据您使用它的方式,这可能就像传入 i 作为参数并返回更改后的值一样简单。

    【讨论】:

      【解决方案3】:

      Keeyai 建议传入 i 作为参数的示例:

      i = 1337
      def g(i):
          print(i)
          i = 42
      g(i)
      

      但是,您从不使用 i 的新值,所以也许这样的事情更有意义:

      def g (i):
          i = 42
          return i
      
      i = 1337
      print g(i)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-21
        • 2011-07-10
        • 2013-09-13
        • 2021-07-11
        • 2017-12-18
        • 2016-09-25
        • 1970-01-01
        • 2016-03-27
        相关资源
        最近更新 更多