python3import用法_Python3 __import__() 函数详解 动态导入(载入、加载)模块

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

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

它是Python的内置函数,在python文件中直接可以使用。

07773ae6fc1d88fff5f848d376876c6c.jpg

语法

__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'

>>>import module

ModuleNotFoundError: No module named 'module'

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

>>>__import__(module)

$实例2 - 使用__import__导入子模块

以os的path子模块为例

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

>>>__import__('os.path')

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

>>>__import__('os.path',fromlist=['None'])

>>>__import__('os.path',fromlist=['path'])

$实例3 - importlib.import_module()函数导入

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

>>>__import__('os.path',fromlist=['path'])

>>>importlib.import_module('os.path')

让它们搭配起来使用。

>>>lib = __import__('importlib')

>>>lib.import_module('os.path')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值