除了像这样分两行写,还有别的方法吗?
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
文件内)。您使用的.
(通常)遍历包内的目录('子'包?)
解释器如何知道包中包含哪个目录,或者如何将给定的目录识别为包?它在其中查找__init__.py
文件。如果它找到一个,它就是一个包,因此你可以导入它。
如果单独使用,import
最多只能访问directories
和modules
。当您使用from <module_or_directory> import <objects>
时,访问目录和/或模块的任务被移交给from
之后的子句,import
之后的子句接管在模块内部查找python对象的任务。您可以看到,这是两件截然不同的事情—1)访问文件/目录,它属于文件系统;2)访问文件的内容,(特别是.py
文件),它属于python的域—在from-import
风格的导入中整齐地分开。
在os
模块的情况下,os.path
是另一个.pyi
文件(在Windows上为ntpath.pyi
),在os.py
文件中别名为path
。因为它是一个模块,所以它放在from os.path import isfile, isdir
中from
之后的子句中。而scandir
是os
模块中的函数,因此它位于from os import scandir
中import
之后的子句中。