gpt4 book ai didi

python - 删除模块以清理命名空间?

转载 作者:太空狗 更新时间:2023-10-30 01:07:36 27 4
gpt4 key购买 nike

我正在开发一个非常庞大的 Python 包。在几个模块内部,不同的程序员导入其他模块来进行计算。为了便于讨论,让我们坚持使用 numpy

通常的做法是,当导入模块时定义一个别名以便于编程,所以假设在模块 foo.py 中有一行代码在做

import numpy as np

所以会有一个foo.np命名空间。我还发现,通过删除 foo.py 中对 np 的引用

del np

在模块的末尾似乎也清除了命名空间。

作为一个大包的维护者,我喜欢这种保持命名空间干净的方式,但我想知道这是否是一个好的编程习惯,或者是否会出现问题,尤其是当我的包有一个模块 bar.pyfoo.py 处于同一级别,它也使用相同的外部 numpy 模块?如果是,是否有一种简单且更好的方法来保持 foobar 的命名空间干净,或者这种命名空间管理本身是个坏主意吗?

最佳答案

这是一个简单的例子:

foo.py:

import numpy as np

def foo(x):
"""Return 2D square array of zeros."""
return np.zeros((x, x))

del np

bar.py:

import numpy as np

def bar():
"""Return 3x3 square array."""
return np.arange(9).reshape(3, 3)

main.py:

from bar import bar
from foo import foo

print bar()

print foo(3)

这里是输出:

[[0 1 2]
[3 4 5]
[6 7 8]]

Traceback (most recent call last):
File "/Users/jonrsharpe/Documents/main.py", line 6, in <module>
print foo(3)
File "/Users/jonrsharpe/Documents/foo.py", line 5, in foo
return np.zeros((x, x))
NameError: global name 'np' is not defined

很明显,这没有影响bar.py(您应该预料到 - del 删除了那个引用 ,但不影响底层对象)但破坏了从 foo.py 导入的功能,因为 np 不再可供该文件中定义的对象访问。


is this housekeeping of namespaces itself a bad idea?

我不确定您认为它的好处是什么。从您已使用完的模块的命名空间中删除名称不会节省太多(如果有的话)空间,并且底层导入模块(numpy,在本例中)仍将位于 sys.modules.

关于python - 删除模块以清理命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30040658/

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