2012-01-13 61 views
-1

这是one.py:如何在python的其他模块中使用变量?

test = {'1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]} 
import two 
two.example() 

这就是two.py:

def example(): 
    print test[1][5] 

你能告诉我,为什么这会出现以下错误失败?

NameError: global name 'test' is not defined 

谢谢!

+2

'import' Python中没有像在其他语言中'include'。 'import two'创建一个名为'two'的模块对象singleton,其内容由two.py中的代码初始化。它不会将“two.py”的内容复制到解析流中! – 2012-01-13 19:55:19

回答

-1

可以导入它在功能

def example(): 
    from one import test 
    print test[1][5] 

或者您也可以通过测试作为一个变量

#one.py 
two.example(test) 

#two.py 
def example(test): 
    print test[1][5] 
+0

函数内部的'import'将会失效!该打印语句将被执行多次。 – 2012-01-13 20:15:23

+0

不,它不会被多次导入。模块只执行一次;之后,使用已经导入的模块。 – kindall 2012-01-13 21:50:28

+0

@kindall:在我看来,'one.py'将会被执行:'$ python one.py',所以函数'example()'将被调用两次,因此数字'6'也将被执行打印两次! *从一个将执行“主代码”而不执行“if __name__ =='__main __”'语句的模块导入是不好的。*因为我不会建议从主文件导入,所以我不会建议使用3个文件对于5行代码,我的观点仍然是:**相互导入是一个不好的建议**。 – 2012-01-13 23:12:42

0

每个模块(包括你的脚本的文本)都有自己的全局变量(global symbol table)命名空间。可以访问其他模块的变量,但并不那么容易。此外,通常更好的方法是将它们作为函数参数传递。

0

您需要导入one.py在two.py文件,它是在命名空间。

Two.py:

from one import * 
print test 
+0

如果将one.py用作模块,这将起作用;否则(如果作为脚本运行),one.py将被第二次执行,这次是作为一个模块执行,而这可能不是需要的。 – Tanriol 2012-01-13 19:55:48

+4

'从xxx进口*'是不是在Python – juliomalegria 2012-01-13 20:08:13

+0

一个很好的做法@Tanriol很快写它在iPhone上。 one.py应该有'if name =='__main__“:#do something'那么它将按计划运行。 – Tehnix 2012-01-13 21:49:45

1

因为你two.py不知道什么test是,你应该传递作为参数传递给example

one.py:

test = {1: [1, 2, 3, 4, 5, 6]} 
import two 
two.example(test) 

two.py:

def example(test): 
    print test[1][5] 

注:我冒昧地从'1'test字典项更改为1,因为你叫test[1][5],而不是test['1'][5]

1

在Python中,一切都是对象。 偶模块

testone模块对象的属性,而不是two模块对象。所以在two的代码中,它不在范围内。

相关问题