我在 main() 中有一个变量 (var2),我想从导入模块中的函数访问该变量,而不将其作为参数传递。我尝试从 module.py 中导入 vartest.py,并且可以访问 var1(位于 main() 之外),但不能使用 printFromModule2() 函数访问 var2。
我想我有两个问题:
非常感谢!
编辑:我尝试在模块中导入 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)
在尝试了可能的
import
选项之后,无论我做什么,我都无法让它发挥作用。即使我将 var2
设为全局变量,并使用 from module import printFromModule2
将所有内容放入同一个全局命名空间中,它对我来说也不起作用。
无论如何,这并不是一种很好的编程方式。在大多数语言中,在没有特别需要的地方使用全局变量是不受欢迎的,当您尝试在不同的模块中使用它们时,您就会遇到麻烦。传入参数确实是最好的方法。
var2
内部对main
的引用实际上不能从module.py
到达,也不应该如此。您也许可以调整该值所在的位置,从而从两个地方获取它,但这是在极端情况下,无论用例是什么,都必须有更好的方法。
但是,您可以从函数内的
var1
和 main
获取 module.py
。如果您尝试从两个地方访问相同的变量,那么您应该更愿意尝试获取var2
。
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()
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
为了与问题中的原始代码保持一致,我没有修复格式问题。