为什么写"from os import path.isfile, path.isdir, scandir"无效?
Why is it not valid to write "from os import path.isfile, path.isdir, scandir"?
除了像这样分两行写之外,还有别的写法吗?
from os.path import isfile, isdir
from os import scandir # or import os.scandir
TL;DR 你不能。如果你想从 os.path
.
内部导入 functions/objects,你只有那个方法 from os.path import <stuff>
当您仅使用 import
导入内容时,您只能导入模块(模块是包含 python 对象的 python 文件的术语)。要在模块中导入对象,您可以使用 from
遍历该模块,然后使用 import <whateverObject>
从该文件中导入该对象(任何东西都是 python 中的对象) ,只要它在 .py
文件中)。您使用的 .
是(通常)遍历包内的目录('sub' 包?)。
解释器如何知道包中包含哪个目录,或者如何将给定目录识别为包?它在其中查找 __init__.py
文件。如果找到了,那就是一个包,因此你可以导入它。
如果单独使用,import
最多只能访问 directories
和 modules
。使用from <module_or_directory> import <objects>
时,访问目录and/or模块的任务交给了from
后的子句,import
后的子句接管了寻找python 模块内部的对象。你看,这是两个截然不同的事情 - 1) 访问文件系统下的 file/directory,以及 2) 访问文件的内容(具体来说,.py
文件),它在文件系统下python 的域 - 在导入内容的 from-import
风格中整齐地分开。
对于 os
模块,os.path
是另一个 .pyi
文件(Windows 上的 ntpath.pyi
),即 alias-ed在 os.py
文件中作为 path
。由于它是一个模块,所以它位于 from os.path import isfile, isdir
中 from
之后的子句中。而 scandir
是 os
模块中的一个函数,因此它位于 from os import scandir
.
中 import
之后的子句中
除了像这样分两行写之外,还有别的写法吗?
from os.path import isfile, isdir
from os import scandir # or import os.scandir
TL;DR 你不能。如果你想从 os.path
.
from os.path import <stuff>
当您仅使用 import
导入内容时,您只能导入模块(模块是包含 python 对象的 python 文件的术语)。要在模块中导入对象,您可以使用 from
遍历该模块,然后使用 import <whateverObject>
从该文件中导入该对象(任何东西都是 python 中的对象) ,只要它在 .py
文件中)。您使用的 .
是(通常)遍历包内的目录('sub' 包?)。
解释器如何知道包中包含哪个目录,或者如何将给定目录识别为包?它在其中查找 __init__.py
文件。如果找到了,那就是一个包,因此你可以导入它。
import
最多只能访问 directories
和 modules
。使用from <module_or_directory> import <objects>
时,访问目录and/or模块的任务交给了from
后的子句,import
后的子句接管了寻找python 模块内部的对象。你看,这是两个截然不同的事情 - 1) 访问文件系统下的 file/directory,以及 2) 访问文件的内容(具体来说,.py
文件),它在文件系统下python 的域 - 在导入内容的 from-import
风格中整齐地分开。
对于 os
模块,os.path
是另一个 .pyi
文件(Windows 上的 ntpath.pyi
),即 alias-ed在 os.py
文件中作为 path
。由于它是一个模块,所以它位于 from os.path import isfile, isdir
中 from
之后的子句中。而 scandir
是 os
模块中的一个函数,因此它位于 from os import scandir
.
import
之后的子句中