【问题标题】:Access global variable inside a function访问函数内部的全局变量
【发布时间】:2016-05-22 13:17:51
【问题描述】:

如何将变量作为参数传递给函数?

这是我的代码

def hello (arg):
    global my_name
    my_name = "tarek"

    print("my name is " + arg)

hello(my_name)

这应该打印出来

my name is tarek

但它没有,给了我一个 NameError,尽管我将变量 my_name 声明为全局变量。

好吧,如果我在函数外部声明变量,效果很好,但是为什么在函数内部声明变量时它不起作用?

【问题讨论】:

  • 因为在你调用函数之后才定义变量。
  • 在这段代码中你也不需要global变量,global变量是一个典型的问题来源,你应该避免它们。

标签: python python-3.x scope


【解决方案1】:

你必须在你的函数之外定义你的全局变量,然后你不需要在函数中再次定义它。以下代码将打印您想要的内容:

my_name = "tarek"

def hello(arg):
    print("my name is " + arg)

hello(my_name)

【讨论】:

    【解决方案2】:

    在调用函数之前没有变量 my_name,因此没有任何东西可以传递给函数,从而给出错误。 在函数外部定义变量,然后在函数内部将其声明为全局变量。

    如果您希望 my_name 是全局的,则无需将其传递给函数。只需在函数外部声明并赋值,然后在内部声明为全局即可。

    传递参数通常是因为您希望它是该函数的本地函数,然后我们通常在处理完之后将其返回。对代码进行分区有助于调试。

    【讨论】:

      【解决方案3】:

      hello() 中的任何内容都无法使 my_name 在调用 hello() 时存在。

      【讨论】:

        【解决方案4】:

        你的变量声明被限定在方法内部(闭包),并且在你调用它之前不会评估该闭包,此时你会收到错误,因为该变量在该上下文中不存在。

        如果我理解正确,您似乎想这样做

        def hello (arg):
            global my_name
            my_name = arg
        
            print("my name is " + arg)
        
        hello("tarek")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-12
          相关资源
          最近更新 更多