0

我有一个关于变量范围的 noob python 问题。

我创建了两个脚本。一个包含在另一个中:

文件1.py

a = 10
from file2 import *

文件2.py

print a

当我尝试执行 file1.py 时,出现此错误: NameError: name 'a' is not defined

所以,这是我的问题。是否可以使脚本的变量在包含的脚本中可用?

更新: 我实际上想要做的是这样的:main.py

from config include *
from utils include *

在 config.py 我有

filename = "/tmp/file.txt"

在 utils.py 我有

def write_file():

问题是我有一大堆小函数都需要文件名。现在我在 utils.py 中没有这些功能。我在 main.py 中有它们。但是随着时间的推移 main.py 变得越来越大,我正在考虑是否有一种简单的方法可以将实用程序函数从主脚本中移开。

4

2 回答 2

1

第二print a个文件中的在该范围内执行,而不是在第一个范围内。Python 模块不像 C 头文件,因为代码没有“嵌入”到文件中 - 模块被加载,代码运行,因此允许您从该模块访问名称。

if __name__ == '__main__':模块中常见的块就是一个很好的证明。如果此代码实际嵌入到脚本中,则块内的代码每次都会运行,就像__name__往常一样'__main__'。但是因为所有代码都在导入模块的范围内运行__name__,所以会有不同的值,所以代码只有在顶级脚本中才会运行。

为了能够print a成功,您需要from file1 import a在第二个文件中。

解决您的更新,这应该不是问题。from config import filenameutils脚本中将允许它使用该变量,只要它在filename被引用之前被导入。

于 2013-02-12T08:56:21.347 回答
0

从您的更新来看,它是为了假设您想要在config.py. 解决问题的最佳方法是将文件名作为参数发送给utils.py方法。

def write_file(filename)

是一个更有用的效用函数

def write_file()

这取决于变量filename是否在范围内!恕我直言,它也是很好的编程实践(更喜欢显式而不是隐式是吗?)。

于 2013-02-12T09:32:01.243 回答