【问题标题】:Why don't global variables defined by imported functions change? [closed]为什么导入函数定义的全局变量不会改变? [关闭]
【发布时间】:2019-08-06 12:46:21
【问题描述】:

我在一个文件中有一个函数:

global_value = 100    #defualt
def function(new_value):
    global global_value
    print(global_value,new_value)
    global_value = new_value

function() 接收一个值,将其与 global_value 进行比较,然后将 global_value 设置为 new_value。

我没有在文件中使用这个函数,而是导入它。

(文件2:)

from file import *
value = input("enter value")
function(value)
print(global_value)

该函数正常工作,但最后 global_value 显示等于 100(它是默认值),而不是输入。 我还能做些什么来改变 file2 中的 global_value?

谢谢。

【问题讨论】:

  • :range(5) 之后丢失
  • 除了缺少:,当我尝试时,您的代码运行良好。
  • @khelwood 运行该代码后global_value 的值是多少?我得到 100,我认为这就是问题所在。
  • 循环中的每一轮都正确地向我报告上一次迭代的值和在这次迭代中输入的值。如果在后面的某个步骤中读取 global_value 会给出不同的值,那么该代码应该与输出一起成为问题的一部分。
  • 是的,似乎每次我运行函数 global_value 都会用它的默认值重新定义。

标签: python python-3.x function python-import


【解决方案1】:

Python 中的全局变量并不是真正的全局变量;它们的范围仅限于特定模块。

在你执行from file import *之后,你有两个变量; file.global_variable,这是 file.function 更新的那个,以及当前模块中的新 global_variable,它使用 file.global_variable 的原始值初始化,但从未被 @987654326 更新@。

每个函数都包含对该函数定义的全局范围的引用。在 Python 2 中是file.function.func_globals;在 Python 3 中是 tmp.function.__globals__。这是查找其任何“全局”变量的范围,而不是调用函数的范围

在您的第二个文件中添加一个普通的import file,然后运行print(global_variable, file.global_variable) 来查看区别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2022-01-19
    • 2019-11-08
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多