gpt4 book ai didi

javascript - 在 python 中, "export"来自模块的定制对象

转载 作者:行者123 更新时间:2023-11-28 17:16:12 27 4
gpt4 key购买 nike

JavaScript 中,特别是在 node.js 设置中,可以在 module.js 中拼写 module.exports = 13; ,然后 x = import ("module.js"); 到别处并直接将 13 分配给 x

当模块导出单个函数时,这会节省一些代码,而且我注意到许多广泛使用的包(例如 through2)都在使用它。

有没有办法在 Python 中做同样的事情?也许用一些黑魔法?

我确实听说过一个叫做 loader 的东西,我想它应该在模块可用之前对模块进行一些操作。特别是,我认为 SaltStacksalt.loader 中使用了类似的东西,但代码对我来说太难理解了。我想我们可以编写一个类似这样的函数:

def loader(module):
m = __import__(module)
return m["__exports__"]

— 然后在我们要导入的模块中的某处定义 __exports__ 并享受与 JavaScriptmodule.exports 机制非常相似的功能。但不幸的是 TypeError: 'module' object has no attribute '__getitem__' 阻止我们这样做。

最佳答案

Python 在比 Javascript 更基础的层面上内置了语言导入功能,几乎所有用例都包含在一个简单的 import statement 中。 .

对于您的示例,它真正归结为:

from module import exports as x

因此,无需通过更改 module 来寻找代码节省。

问题的另一部分是,作为模块作者,您如何限制人们只能看到一个符号。

通常这不是必需的,除非是为了帮助用户了解什么是公共(public)功能与实现细节。 Python 对此有一些常见的习语:

  • 任何以前导下划线开头的名称,例如 _helper,都被视为私有(private)。它们可以正常访问,但这意味着您不应该访问它们。
  • 如果模块级变量 __all__ = [...] 存在,则只有它包含的字符串被视为公共(public)。名称必须在模块中单独声明。

除了文档之外,这两者都会影响模块导入的一个方面:

from module import *

通常不鼓励使用星号导入,但只有公共(public)名称 会被引入本地命名空间。

关于javascript - 在 python 中, "export"来自模块的定制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43964313/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com