2014-09-02 86 views
-1

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

我想我有两个问题:

  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() 

module.py:

var3 = 'variable inside module' 

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

def printFromModule2(): 
    print ("module print: %s" % var2) 
+0

您无法访问该函数之外的函数局部变量。 – chepner 2014-09-02 14:51:10

回答

0

有可能import选项玩弄后,我不能得到这个不管我做什么工作。即使我使var2成为一个全局变量,并使用from module import printFromModule2将所有内容放入同一个全局命名空间,它也不适用于我。但是,这并不是真正的编程方式。在大多数语言中,只要不特别需要使用全局变量,当你尝试在不同的模块中使用全局变量时,你就会遇到麻烦。传递参数确实是最好的方法。

+0

谢谢你的解释 - 我仍在学习最佳实践,所以这是有价值的信息。将远离全局变量并传递更多。 – Oli 2014-09-02 14:56:39

+0

@Oli这是个好主意。当你编程更多的时候,你会学到一些全局变量真的很有用的场景(比如互斥锁),但是最好还是尽量远离。 – TheSoundDefense 2014-09-02 15:04:00