gpt4 book ai didi

Python命名空间更改为 `import package.sub_module; from package import *`

转载 作者:行者123 更新时间:2023-11-30 22:50:47 29 4
gpt4 key购买 nike

Python documentation

Consider this code:

import sound.effects.echo
import sound.effects.surround
from sound.effects import *

In this example, the echo and surround modules are imported in the current namespace because they are defined in the sound.effects package when the from...import statement is executed. (This also works when __all__ is defined.)

我尝试以下代码

# package/
# __init__.py
# sub_module.py

import package.sub_module
from package import *
print(sub_module)

何时 package/__init__.py为空,代码工作正常。然而,当 package/__init__.py包含__all__ = [] , print(sub_module)将提高NameError 。文档中的是什么(这在定义all时也有效。)

<小时/>

代码:

package/
__init__.py
sub_module.py # empty file
main.py

在main.py中:

import package.sub_module
from package import *
print(sub_module)

何时 package/__init__.py为空,正在执行python3 main.py得到 <module 'package.sub_module' from '/path/to/package/sub_module.py'

何时 package/__init__.py包含__all__ = [] ,执行python3 main.py得到

Traceback (most recent call last):
File "main.py", line 3, in <module>
print(sub_module)
NameError: name 'sub_module' is not defined

最佳答案

如果模块package定义了__all__,则它是由from package import *导入的模块名称列表

因此,如果将 __all__ 定义为空列表,from package import * 将不会导入任何内容。

尝试这样定义它:

__all__ = ['sub_module']

另请注意,您不必执行 from package import * 即可使用 sub_module

您也可以这样做:

import package.sub_module
print(package.sub_module)

关于Python命名空间更改为 `import package.sub_module; from package import *`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39219722/

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