__import__

__import__
作用:
同import语句同样的功能,但__import__是一个函数,并且只接收字符串作为参数,所以它的作用就可想而知了。其实import语句就是调用这个函数进行导入工作的,import sys <==>sys = __import__(‘sys‘)
e.g:

__import__(module_name[, globals[, locals[, fromlist]]]) #可选参数默认为globals(),locals(),[]
__import__(‘os‘)    
__import__(‘os‘,globals(),locals(),[‘path‘,‘pip‘])  #等价于from os import path, pip

说明:

通常在动态加载时可以使用到这个函数,比如你希望加载某个文件夹下的所用模块,但是其下的模块名称又会经常变化时,就可以使用这个函数动态加载所有模块了,最常见的场景就是插件功能的支持。

扩展:
既然可以通过字符串来动态导入模块,那么是否可以通过字符串动态重新加载模块吗?试试reload(‘os‘)直接报错,是不是没有其他方式呢?虽然不能直接reload但是可以先unimport一个模块,然后再__import__来重新加载模块。现在看看unimport操作如何实现,在Python解释里可以通过globals(),locals(),vars(),dir()等函数查看到当前环境下加载的模块及其位置,但是这些都只能看不能删除,所以无法unimport;不过除此之外还有一个地方是专门存放模块的,这就是sys.modules,通过sys.modules可以查看所有的已加载并且成功的模块,而且比globals要多,说明默认会加载一些额外的模块,接下来就是unimport了。

[python] view plain copy

    1. #!/usr/bin/env python
    2. #encoding: utf-8
    3. import sys
    4. __import__(‘a‘)      #第一次导入会打印消息
    5. del sys.modules[‘a‘]   #unimport
    6. __import__(‘a‘)    #再次导入还是会打印消息,因为已经unimport一次了
    7. __import__(‘a‘)    #这次就不会打印消息了
时间: 2024-10-10 16:36:54

__import__的相关文章

Python 的内置函数__import__

我们知道import语句是用来导入外部模块的,当然还有from...import...也可以,但是其实import实际上是使用builtin函数__import__来工作的.     在一些程序中,我们可以动态地去调用函数,如果我们知道模块的名称(字符串)的时候,我们可以很方便的使用动态调用. Python代码   import glob,os modules = [] for module_file in glob.glob("*-plugin.py"): try: module_n

python内置函数__import__

我们知道import语句是用来导入外部模块的,当然还有from...import...也可以,但是其实import实际上是使用builtin函数__import__来工作的.     在一些程序中,我们可以动态地去调用函数,如果我们知道模块的名称(字符串)的时候,我们可以很方便的使用动态调用. import glob,os      modules = []   for module_file in glob.glob("*-plugin.py"):       try:       

python 反射(__import__、getattr)

#反射的作用在于模块导入,函数调用时简化代码 以URL为例: 假设URL的形式是A/B #!/usr/bin/env python# _*_ coding:utf-8 _*_# 常规'''from backend import login,logout,admindata = raw_input('请输入URL')if data == 'login/mylogin': login.mylogin()elif data == 'logout/mylogout': logout.mylogout()

Python函数 __import__()

功能: __import__() 函数用于动态加载类和函数 .返回元组列表. 如果一个模块经常变化就可以使用 __import__() 来动态载入. __import__ 语法: __import__(name[, globals[, locals[, fromlist[, level]]]]) name 模块名 实例: 1 #!/usr/bin/env python 2 #encoding: utf-8 3 4 import os 5 6 print '在 a.py 文件中',id(os) a

python中的import,reload,以及__import__

import作用:导入/引入一个python标准模块,其中包括.py文件.带有__init__.py文件的目录.e.g: [python] view plaincopy import module_name[,module1,...] from module import *|child[,child1,...] 说明:多次重复使用import语句时,不会重新加载被指定的模块,只是把对该模块的内存地址给引用到本地变量环境.测试: [python] view plaincopy a.py #!/u

基础入门_Python-模块和包.运维开发中__import__动态导入最佳实践?

常规导入: import module_name[,module1,...]  from module_name import [*|child[,child1,...] from module_name import [*|child[,child1,...] as alias_name 注意: 导入语句可出现在程序任意位置,自定义包要实现from module_name import *的效果则此模块必须在__init__.py实现__all__ = ['module_1', 'module

Python标准库:内置函数__import__(name, globals=None, locals=None, fromlist=(), level=0)

本函数实现导入模块的功能.这个函数主要为了语句import的功能而实现的,大多数情况之下,是不需要直接使用这个函数.比如想动态地加载模块,才需要使用这个函数. 例子: import glob,os modules = [] for module_file in glob.glob("*-plugin.py"): try: module_name,ext = os.path.splitext(os.path.basename(module_file)) module = __import

(转)Python自动化运维之13、异常处理及反射(__import__,getattr,hasattr,setattr)

Python自动化运维之13.异常处理及反射(__import__,getattr,hasattr,setattr) 一.异常处理 python异常: python的运行时错误称作异常 (1)语法错误:软件的结构上有错误而导致不能被解释器解释或不能被编译器编译 (2)逻辑错误:由于不完整或不合法的输入所致,也可能是逻辑无法生成.计算或者输出结果需要的过程无法执行等 python异常是一个对象,表示错误或意外情况 (1)在python检测到一个错误时,将触发一个异常 python可以通常异常传导机

python中反射(__import__和getattr使用)

反射: 1.可通过字符串的形式导入模块 1.1.单层导入 1 __import__('模块名') 1.2.多层导入 1 __import__(' list.text.commons',fromlist=True) #如果不加上fromlist=True,只会导入list目录 2.可以通过字符串的形式执行模块的功能 1 import glob,os 2 3 modules = [] 4 for module_file in glob.glob("*-plugin.py"): 5 try: