Python3内置函数汇总

目录

Python3 __import__() 函数详解 动态导入(载入、加载)模块

__import__()函数的主要作用是动态导入指定模块,并且可以设置模块的使用环境(全局变量集合以及局部变量集合)以及模块的相对位置,它主要用于模块的局部导入,并且支持字符串名称。一般业务逻辑中不建议直接使用__import__,而是采用importlib的import_module函数来代替,因为__import__在加载子模块时比较诡异。
它是Python的内置函数,在python文件中直接可以使用。

__import__

语法

__import__(name, globals=None, locals=None, fromlist=(), level=0)

参数

name[必填] - 模块名称
globals - 全局变量集合,默认为None,一般不用设置。如果设置的话,常用globals()。
locals - 局部变量集合,默认为None,一般不用设置。如果设置的话,常用locals()。
fromlist - 是否导入子模块,看上去是导入模块的列表。但实际上目前它只是一个判断条件,只要设置为非空的值,且模块名称是带有子模块的,将导入子模块。例如:sys.path。当不设置时,返回sys,如果设置为非空值,则返回ntpath(path模块)。
level - 绝对或者相对导入。

返回值

返回导入的模块,一般会赋值给变量,以便后期使用。

实例

§ 实例1 - 静态导入与动态导入

静态导入:以导入time模块为例

>>> import time
>>> time
<module 'time' (built-in)>

对于一些已知的模块,我们可以采用静态导入的方式,但是对于一些有特殊需求的或者需要将模块名称赋值给变量后再导入,静态导入是会报错的。例如:

>>> module = 'time'
>>> import module
ModuleNotFoundError: No module named 'module'

报错,无法找到对应的模块,它将变量名称作为模块名称进行导入,而不是已变量值作为名称导入。这时就要用到动态导入咯。

>>> __import__(module)
<module 'time' (built-in)>
$实例2 - 使用__import__导入子模块

以os的path子模块为例
__import__在未设置fromlist参数时,无论模块名称如何设置,它都将导入最左边名称的模块,例如os.path,将导入os模块,如果设置了fromlist为非空(包括None),将导入最右边的模块,也就是子模块,例如os.path将导入path模块,test.a.b将导入b模块。

>>> __import__('os.path')
<module 'os' from 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\os.py'>

设置了fromlist参数,返回了子模块

>>> __import__('os.path',fromlist=['None'])
<module 'ntpath' from 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\ntpath.py'>
>>> __import__('os.path',fromlist=['path'])
<module 'ntpath' from 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\ntpath.py'>
$实例3 - importlib.import_module()函数导入

使用importlib模块的import_module函数导入,在导入子模块时非常方便,应该由importlib.import_module()函数来代替__import__()函数,或者也可以搭配使用。

>>> __import__('os.path',fromlist=['path'])
<module 'ntpath' from 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\ntpath.py'>

>>> importlib.import_module('os.path')
<module 'ntpath' from 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\ntpath.py'>

让它们搭配起来使用。

>>> lib = __import__('importlib')
>>> lib.import_module('os.path')
<module 'ntpath' from 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\ntpath.py'>

如果有任何建议或意见,欢迎交流沟通

作者:张恺阳

本文链接:https://www.zky.name/article/72.html

来源:张恺阳博客