Python 包含,模块范围问题

标签 python import include module

我正在处理我的第一个重要的 Python 项目,但我在范围问题和包含文件中的执行代码方面遇到了麻烦。以前我的经验是使用 PHP。

我想做的是拥有一个设置多个配置变量的文件,然后在整个代码中使用这些变量。另外,我想让某些函数和类在全局范围内可用。例如,主文件将包含一个单独的其他文件,该文件将加载一堆常用函数(每个函数都在其自己的文件中)和一个配置文件。在这些加载的文件中,我还希望能够访问函数和配置变量。我不想做的是必须将整个例程放在每个(包含的)文件的开头以包含所有其余文件。此外,这些包含的文件位于不同的子目录中,这使得导入它们变得更加困难(尤其是当我必须在每个文件中重新导入时)。

无论如何,我正在寻找关于构建代码以实现我想要的目标的最佳方式的一般性建议。

谢谢!

最佳答案

在 Python 中,通常的做法是拥有一堆实现各种功能的模块,然后拥有一个模块作为所有功能的访问点。这基本上是 facade pattern .

举个例子:假设你正在编写一个包 foo,其中包括 barbazmoo模块。

~/project/foo
~/project/foo/__init__.py
~/project/foo/bar.py
~/project/foo/baz.py
~/project/foo/moo.py
~/project/foo/config.py

您通常会像这样编写 __init__.py:

from foo.bar import func1, func2
from foo.baz import func3, constant1
from foo.moo import func1 as moofunc1
from foo.config import *

现在,当你想使用你刚刚做的功能时

import foo
foo.func1()
print foo.constant1
# assuming config defines a config1 variable
print foo.config1

如果你愿意,你可以安排你的代码,这样你只需要写

import foo

在每个模块的顶部,然后通过 foo 访问所有内容(您可能应该将其命名为“globals”或类似的名称)。如果你不喜欢命名空间,你甚至可以这样做

from foo import *

并且让所有东西都是全局的,但这真的不推荐。请记住: namespace 是一个绝妙的主意!

关于Python 包含,模块范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/507425/

相关文章:

java - 我是一名 Java 编码新手,正在寻求有关如何将 .class 或 .java 源文件导入可执行 jar 文件的帮助

c++ - 通过#include 将文件内容分配给 char 数组

javascript - 包含域外的js文件

python - 是否可以获取 tkinter 文本中标记的数字索引(位置)?

Python 许多依赖项中的任何一个

python - 在一系列条件中获取列表内的值

python - 更改由 sklearn.model_selection.train_test_split 产生的数组中值的类型

WordPress: "The link you followed has expired"问题

python 导入 csv 列表

php - 包含的 PHP 页面中的 jQuery 代码