Python 当包的uuu init_uuuuuuuuuuuy.py中未定义uuuuuuu all_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?

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

我只是在学习和练习python,在路上,我正在阅读python包以及如何导入到其他模块或包中,我假设以下场景

我有一个包裹

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*
中的
,只需显式导入您需要的任何内容即可。