Python 当包的uuu init_uuuuuuuuuuuy.py中未定义uuuuuuu all_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?
我只是在学习和练习python,在路上,我正在阅读python包以及如何导入到其他模块或包中,我假设以下场景 我有一个包裹Python 当包的uuu init_uuuuuuuuuuuy.py中未定义uuuuuuu all_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?,python,mkv,Python,Mkv,我只是在学习和练习python,在路上,我正在阅读python包以及如何导入到其他模块或包中,我假设以下场景 我有一个包裹 Video/ __init__.py formats/ __init__.py mkv.py mp4.py length/ __init__.py morethan20min.py lessthan20min.py 而且没有 __init__.py
Video/
__init__.py
formats/
__init__.py
mkv.py
mp4.py
length/
__init__.py
morethan20min.py
lessthan20min.py
而且没有
__init__.py
我还没有定义
__all__
如果我有一个import语句
import Video.format.mkv
import Video.formats.*
由于我已经在第一条语句中导入了mkv模块,执行第二条导入语句后会发生什么,我在阅读了上面提到的链接后没有得到这个概念。当您这样做时
from whatever_package import *
首先,如果包的\uuuu init\uuuu.py
尚未运行,它将运行。(如果您已经执行了导入任何特定于包的内容的,则包的\uuuuu init\uuuuuuuuuy.py
将已经运行。)
然后,如果whater\u包.\uuuuuu init\uuuuuuuuuu
没有定义\uuuuuu all\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这将是\uuuu init\uuuuu.py
中定义的任何内容,以及已由程序中执行的任何代码显式导入的任何子模块。例如,如果任何包的\uu init\uuuuuuuupy
为空,则执行以下操作:
import whatever_package.something_specific
from whatever_package import *
import whatever_package.other_thing
并且您的程序中不存在与任何包
相关的其他导入语句,那么导入*
将拾取特定的东西
,但不会拾取任何包
的任何其他子模块,例如其他东西
*排除以下划线开头的任何内容,这是任何不包含\uuuu all\uuuuuu
列表的导入*
的标准,无论您是从软件包还是普通模块导入。
from whatever_package import *
首先,如果包的\uuuu init\uuuu.py
尚未运行,它将运行。(如果您已经执行了导入任何特定于包的内容的,则包的\uuuuu init\uuuuuuuuuy.py
将已经运行。)
然后,如果whater\u包.\uuuuuu init\uuuuuuuuuu
没有定义\uuuuuu all\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这将是\uuuu init\uuuuu.py
中定义的任何内容,以及已由程序中执行的任何代码显式导入的任何子模块。例如,如果任何包的\uu init\uuuuuuuupy
为空,则执行以下操作:
import whatever_package.something_specific
from whatever_package import *
import whatever_package.other_thing
并且您的程序中不存在与任何包
相关的其他导入语句,那么导入*
将拾取特定的东西
,但不会拾取任何包
的任何其他子模块,例如其他东西
*排除以下划线开头的任何内容,这是任何不包含\uuuuu all\uuuuuuuuu
列表的导入*
的标准,无论您是从软件包还是普通模块导入。正确的名称是\uuuu init\uuuuuuuuuuuuuuy
,它只是多余的,你要么从Video.format获取所有内容,要么获取特定内容。这就像说我只想要一个人,但你却把所有人都带走了。因此,一开始就选择一个人是没有意义的。此外,您不能执行导入Video.formats.*
*
导入仅与导入语句的from
形式一起工作。但是他们提到,如果未定义全部,则语句import Video.format.*不会将包Video.format中的所有子模块导入当前命名空间;好的,谢谢各位。正确的名字是\uuuu init\uuuuuuuuuuupy
,而不是\uuuuuuu init.py\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
。你不会得到错误,只是多余的,你要么从Video.format获取所有内容,要么获取特定内容。这就像说我只想要一个人,但你却把所有人都带走了。因此,一开始就选择一个人是没有意义的。此外,您不能执行导入Video.formats.*
*
导入仅与导入语句的from
形式一起工作。但是他们提到,如果未定义全部,则语句import Video.format.*不会将包Video.format中的所有子模块导入当前命名空间;好的,谢谢你,伙计如果有什么特别的事情发生了什么empty@user6654733:导入将获取由\uuuu init\uuuuuuy.py
@user6654733定义的任何内容:那么在导入语句中使用*符号有什么好处?它只有在我们定义\uuuuu all\uuuuuuuuuu
时才有用?它几乎没有用处。您几乎不应该使用x导入的*
,只需显式导入您需要的任何内容。如果某个特定的内容不可用,会发生什么情况empty@user6654733:导入将获取由\uuuu init\uuuuuuupy
@user6654733定义的任何内容:那么在导入语句中使用*符号有什么好处?只有在定义\uuuuuu all\uuuuuuuuu
时才有用?它非常有用从来没用过。您几乎不应该使用x import*
中的,只需显式导入您需要的任何内容即可。