有类似Python导出的东西吗?

有类似Python导出的东西吗?,python,python-module,Python,Python Module,我们一直使用python的导入机制来导入模块、变量和其他东西。但是,有什么可以作为导出使用的吗?比如: 我们从模块导入内容: from abc import * 那么我们能像这样出口吗 to xyz export * 或 将a、b、c导出到program.py 我知道这个问题不是这里要问的典型问题。但只是出于好奇。我在python控制台上检查了一下,没有任何东西是作为“导出”存在的……可能它是以不同的名称存在的。首先,导入要导出内容的模块,这样您就有了对它的引用。然后指定要导出为模块属性的内

我们一直使用python的导入机制来导入模块、变量和其他东西。但是,有什么可以作为导出使用的吗?比如:

我们从模块导入内容:

from abc import *
那么我们能像这样出口吗

to xyz export *
或 将a、b、c导出到program.py


我知道这个问题不是这里要问的典型问题。但只是出于好奇。我在python控制台上检查了一下,没有任何东西是作为“导出”存在的……可能它是以不同的名称存在的。

首先,导入要导出内容的模块,这样您就有了对它的引用。然后指定要导出为模块属性的内容:

# to xyz export a, b, c
import xyz
xyz.a = a
xyz.b = b
xyz.c = c
要进行通配符导出,可以使用循环:

# to xyz export *
exports = [(k, v) for (k, v) in globals().iteritems() if not k.startswith("_")]
import xyz
for k, v in exports: setattr(xyz, k, v)
(请注意,在导入模块之前,我们会收集要导出的对象列表,以便避免导出对刚刚导入的模块的引用。)


这基本上是一种猴子修补术。它有它的时间和地点。当然,要让它工作,必须执行“导出”模块本身;简单地导入将被修补的模块并不会神奇地意识到某个地方的其他代码将修补它。

这到底是如何工作的?你为什么要这样做?我甚至无法想象在python中会出现什么样的噩梦,如果任何脚本在任何时候都可以随意地将自己注入到其他模块中。听起来类似于臭名昭著的。如果你有a.py和b.py,并且a.py需要b.py的垃圾-a.py应该从b.py导入它需要的东西。不要期望其他人在a.py之前加载b.py,以便b.py能够及时将其值导出到a.py,以便a.py能够执行它需要执行的操作。看到这里的问题了吗?一般来说,如何“导出”到任何称为“导入我的导出器模块”的模块?[不带“*”]我通过在builtins()中放入条目来完成这项工作,但我希望放入与我的\u exporter\u模块同名的内容。这种模块在导入时成为某个类的对象。