为什么写"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 最多只能访问 directoriesmodules。使用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, isdirfrom 之后的子句中。而 scandiros 模块中的一个函数,因此它位于 from os import scandir.

import 之后的子句中