【问题标题】:Access variable in main function from other script从其他脚本访问主函数中的变量
【发布时间】:2021-09-10 00:05:00
【问题描述】:

这可能是一个愚蠢的问题,但我有点难以让它发挥作用:

假设我有两个文件:

script1.py:

    myValue = 0

def addition():
    global myValue
    myValue += 1

if __name__ == '__main__':
    addition()
    print(myValue)

script2.py:

def getMyValue():
    from script1 import myValue
    print(myValue)

getMyValue()

输出:0

我希望我的第二个脚本访问更新后的值,这样我就可以得到“1”作为输出。 你觉得我怎么能做得好?

感谢您的回复

【问题讨论】:

  • 看起来myValue 只会更新,除非您实际调用addition() 函数。您要解决的更普遍的问题是什么?因为通常可变全局变量不是传递数据的好方法。
  • @Iguananaut 是的,就是这样,我只需要更新myValue 值,这样第二个脚本就可以获得更新后的值 (1)。我对 if __name__ == '__main__' 不是很熟悉,但它返回 0。我肯定遗漏了一些东西。

标签: python python-3.x main


【解决方案1】:

变量myValue 没有在script2.py 中更新,因为您没有通过导入script1 来调用addition() 函数。那是由于条件 if __name__ == '__main__' 确保只有在您运行脚本本身时才会执行以下每个逻辑。如果将 script1 导入另一个脚本,则条件 if __name__ == '__main__' 变为 False,并且以下代码均不会运行。 您可以直接在 script1 中调用 addition(),这不是一个非常干净的解决方案 - 脚本1:

myValue = 0

def addition():
    global myValue
    myValue += 1

addition()

或者重新考虑addition()是否真的需要对全局变量进行操作。请注意,python 中的全局变量只是一个模块内的全局变量,而不是跨多个模块的全局变量,因此将变量和函数都导入脚本 2 将不允许您在脚本 2 中调用 addition() 并获得预期效果。但是,我建议让它接受这样的参数 - script1:

myValue = 0

def addition(a_value):
    a_value += 1
    return a_value

if __name__ == '__main__':
    myValue = addition(myValue)
    print(myValue)

然后调用script2中的加法函数,例如如下-script2

from script1 import *

def getMyValue():
    my_new_value = addition(myValue)
    print(my_new_value)

getMyValue()

【讨论】:

  • 感谢您的回复,我只是有一个问题,我addition函数被多次调用,myValue将停留在1,如果我想要这个怎么办最多 2、3、10... 并在我的第二个脚本中检索它?谢谢!
猜你喜欢
  • 2015-07-30
  • 2018-03-07
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
相关资源
最近更新 更多