阅读目录
一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过import module 或者 from * import module的方式导入,这属于静态导入,很容易理解。
而如果当我们需要在程序的运行过程时才能决定导入某个文件中的模块时,并且这些文件提供了同样的接口名字,上面说的方式就不适用了,这时候需要使用python 的动态导入。
importlib使用
如在scripts目录中保存着一些功能模块,向外提供类似的接口poc()和脚本描述信息description,需要传入一个参数target,当然脚本执行的功能是不一样的,以下只是举例:
starnight:EXP-M starnight$ ls scripts/ __init__.py __pycache__ test1.py test2.py test3.py starnight:EXP-M starnight$ cat scripts/test1.py #!/usr/bin/env python # -*- coding:utf-8 -*- description = 'it is a test1' def poc(target): print('it is a test1') return True
而我们需要动态传入脚本名,来选用此时要执行的功能:
#!/usr/bin/env python # -*- coding:utf-8 -*- import importlib script_name = input('please input script_name : ') # 手动输入脚本名 module = importlib.import_module('scripts.{}'.format(script_name)) # 动态导入相应模块 func = module.poc('') # 执行脚本功能 print(module.description) # 获取脚本描述信息
please input script_name : test1 it is a test1 it is a test1 ... please input script_name : test3 it is a test3 it is a test3
当我们动态给定脚本名字时,就会动态的导入该模块,执行相应的功能。
importlib其他介绍
python doc: importlib
importlib中的几个函数:__import__、import_module、find_loader、invalidate_caches、reload
"Note Programmatic importing of modules should use import_module() instead of this function."
当进行编程时,使用import_module,如上使用该模块。
find_loader用来查找模块,reload重新载入模块,invalidate_caches不多介绍了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。