仅在一个文件中导入Python模块
具体来说,我有一些.py文件,其中main.py会导入像os、pygame、math以及其他的.py文件,比如mymodule01.py等等。
我的问题是,每当main.py调用我的某个.py文件,而那个文件里有像os.listdir()这样的代码时,我总是会收到一个错误提示,内容是'os未定义'。
我是不是应该在我写的每个.py文件里都导入所有需要的模块,还是有更好的方法,比如一个集中导入的方式,让每个文件都能识别?特别是使用pygame的时候,这会很麻烦,因为我需要在每个文件里初始化pygame才能使用它的功能,更别提如果我想在屏幕上显示东西了。
关于Python模块和包的文档对我帮助不大,要么是我理解得太慢了,要么是文档不够清晰。我还发现,按照文档的指示,在包含文件夹的init.py文件里添加例如import mymodule01.py后,还是会出现找不到文件的错误。
2 个回答
7
我觉得你可能以为“import”在这里的作用和其他语言里的“include”是一样的,其实不是这样的。
每个模块对象都是一个单例,也就是说它只会被创建一次。这样就不会出现性能下降或者模块代码被初始化多次的风险。
而且,每个文件都有自己的作用域。所以在你的例子中,如果你在main.py里定义了foo = 1
,那么在foo
的。你需要用import main; main.foo
来访问它(不过其实你不应该这么做)。
虽然你可能会抱怨,但这个系统其实比include
要好得多。
5
我每写一个.py文件都应该导入所有需要的模块吗?
是的。
特别是使用pygame的时候,这样会很混乱,因为我每个文件都得初始化pygame才能使用它的功能。
不,初始化只需要一次。模块只有一个副本。