将变量从 main() 传递到模块

问题描述 投票:0回答:2

我在 main() 中有一个变量 (var2),我想从导入模块中的函数访问该变量,而不将其作为参数传递。我尝试从 module.py 中导入 vartest.py,并且可以访问 var1(位于 main() 之外),但不能使用 printFromModule2() 函数访问 var2。

我想我有两个问题:

  1. 这可以实现吗?
  2. 如果这不是我“应该”做的事情,那么正确的工作方式是什么?

非常感谢!

编辑:我尝试在模块中导入 vartest.py,并且可以访问 vartest.var1,但不能访问 vartest.var2 或 vartest.main.var2——但是不确定其中第二个是否是有效的 Python。

vartest.py:

import sys
import module

var1 = 'variable 1 in vartest.py'
def main():
    var2 = 'variable 2 inside main'

    print var1
    print var2
    print module.var3
    module.printFromModule(var1)
    module.printFromModule(var2)
    module.printFromModule(module.var3)
    module.printFromModule2()

if __name__ == "__main__": main()

模块.py:

var3 = 'variable inside module'

def printFromModule(var_x1):
    print ("module print: %s" % var_x1)

def printFromModule2():
    print ("module print: %s" % var2) 
python variables module
2个回答
0
投票

在尝试了可能的

import
选项之后,无论我做什么,我都无法让它发挥作用。即使我将
var2
设为全局变量,并使用
from module import printFromModule2
将所有内容放入同一个全局命名空间中,它对我来说也不起作用。

无论如何,这并不是一种很好的编程方式。在大多数语言中,在没有特别需要的地方使用全局变量是不受欢迎的,当您尝试在不同的模块中使用它们时,您就会遇到麻烦。传入参数确实是最好的方法。


0
投票

var2
内部对
main
的引用实际上不能从
module.py
到达,也不应该如此。您也许可以调整该值所在的位置,从而从两个地方获取它,但这是在极端情况下,无论用例是什么,都必须有更好的方法。

但是,您可以从函数内的

var1
main
获取
module.py
。如果您尝试从两个地方访问相同的变量,那么您应该更愿意尝试获取
var2

vartest.py:

import module

var1 = 'variable 1 in vartest.py'

def main():
    var2 = 'variable 2 inside main'

    print(var1)
    print(var2)
    print(module.var3)

    module.printFromModule(var1)
    module.printFromModule(var2)
    module.printFromModule(module.var3)

    module.printFromModule2()

if __name__ == "__main__": main()

模块.py:

import vartest  # ADD THIS LINE TO MAKE var1 ACCESSIBLE

var3 = 'variable inside module'

def printFromModule(var_x1):
    print("module print: %s" % var_x1)

def printFromModule2():
    # var2 is inside vartest.main() and way out of scope
    # print("module print 2: %s" % var2)

    # var1 is also undefined in this scope unless fixed
    # print("module print 2: %s" % var1) 

    # this of course works
    print("module print 2: %s" % var3) 

    # var1 will work when an import added: import vartest
    # and var1 prefixed with reference to vartest module: vartest.var1
    print("module print 2: %s" % vartest.var1)  # ADD vartest. TO REACH var1

输出:

$ python vartest.py
variable 1 in vartest.py
variable 2 inside main
variable inside module
module print: variable 1 in vartest.py
module print: variable 2 inside main
module print: variable inside module
module print 2: variable inside module
module print 2: variable 1 in vartest.py

为了与问题中的原始代码保持一致,我没有修复格式问题。

© www.soinside.com 2019 - 2024. All rights reserved.