python __import__内置函数使用

__import__函数功能用于动态的导入模块,主要用于反射或者延迟加载模块(满足条件才加载)。

实验环境

目录结构

├── pkg
│   ├── __init__.py
│   ├── mod2.py
│   ├── mod.py
│   └── __pycache__
│       ├── __init__.cpython-36.pyc
│       ├── mod2.cpython-36.pyc
│       └── mod.cpython-36.pyc
└── test.py

mod.py文件内容:

print('mod')

mod2.py文件内容:

print('mod2')

__import__函数使用

原型: import(name, globals=None, locals=None, fromlist=(), level=0)

  • name:
    要导入的模块名,可使用变量(而使用import时只会查找对应的模块名)
    当name变量的形式为package.module时,也会返回顶层模块(因为这是由import语句绑定到名称的对象),而不是按名称命名的模块
    测试代码:
pkg = __import__('pkg.mod')
print('test.py')
print(pkg)

# output  
'''
mod
test.py
<module 'pkg' from '/home/cs/tt/test/pkg/__init__.py'>  // 返回顶级包
'''
  • fromlist:
    指定要导入的子模块名或对象名,它们会按名称从模块导入; fromlist为空时则导入顶级包(如果是包)或者模块(如上面的测试代码情况)
pkg = __import__('pkg', fromlist=['mod', 'mod2'])  # 返回pkg包,检索fromlist中要导入的名称并将其分配给它们各自的名称
print('test.py')
print(pkg)

# output
'''
mod   # 该显示说明模块被导入时需要编译
mod2
test.py
<module 'pkg' from '/home/cs/tt/test/pkg/__init__.py'>
'''

观察导入后绑定的pkg.mod和pkg.mod2模块对象

pkg = __import__('pkg', fromlist=['mod', 'mod2']) 
print('test.py')
mod = pkg.mod    # 等同 'from pkg import mod'
print(mod)
print(pkg.mod)  # 查看绑定的模块对象mod, 
mm = pkg.mod2   # 等同 'from pkg import mod2 as mm'
print(mm)

# output
'''
mod
mod2
test.py
<module 'pkg' from '/home/cs/tt/test/pkg/__init__.py'>
<module 'pkg.mod' from '/home/cs/tt/test/pkg/mod.py'>
<module 'pkg.mod2' from '/home/cs/tt/test/pkg/mod2.py'>
'''
  • level
    指定导入模块的方式。
    level为0则绝对导入; level为正值则表示相对于调用__import __()的模块目录,要搜索的父目录数

  • globals和locals
    通常使用默认值。使用给定的globals和locals变量来决定如何在一个包上下文中解析name,标准的启用中根本不会使用它的locals 参数,并且它的globals只是用来决定import语句的包上下文

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值