16.6. 动态导入模块

好了,大道理谈够了。让我们谈谈动态导入模块吧。

首先,让我们看一看正常的模块导入。import module 语法查看搜索路径,根据给定的名字寻找模块并导入它们。你甚至可以这样做:以逗号分割同时导入多个模块,本章代码前几行就是这样做的。

例 16.13. 同时导入多个模块


import sys, os, re, unittest 
这里同时导入四个模块:sys (为系统函数和得到命令行参数)、os (为目录列表之类的操作系统函数)、re (为正则表达式),以及 unittest (为单元测试)。

现在让我们用动态导入做同样的事。

例 16.14. 动态导入模块

>>> sys = __import__('sys')           
>>> os = __import__('os')
>>> re = __import__('re')
>>> unittest = __import__('unittest')
>>> sys                               
>>> <module 'sys' (built-in)>
>>> os
>>> <module 'os' from '/usr/local/lib/python2.2/os.pyc'>
内建 __import__ 函数与 import 语句的既定目标相同,但它是一个真正的函数,并接受一个字符串参数。
变量 sys 现在是 sys 模块,和 import sys 的结果完全相同。变量 os 现在是一个 os 模块,等等。

因此 __import__ 导入一个模块,但是是通过一个字符串参数来做到的。依此处讲,你用以导入的仅仅是一个硬编码性的字符串,但它可以是一个变量,或者一个函数调用的结果。并且你指向模块的变量也不必与模块名匹配。你可以导入一系列模块并把它们指派给一个列表。

例 16.15. 动态导入模块列表

>>> moduleNames = ['sys', 'os', 're', 'unittest'] 
>>> moduleNames
['sys', 'os', 're', 'unittest']
>>> modules = map(__import__, moduleNames)        
>>> modules                                       
[<module 'sys' (built-in)>,
<module 'os' from 'c:\Python22\lib\os.pyc'>,
<module 're' from 'c:\Python22\lib\re.pyc'>,
<module 'unittest' from 'c:\Python22\lib\unittest.pyc'>]
>>> modules[0].version                            
'2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)]'
>>> import sys
>>> sys.version
'2.2.2 (#37, Nov 26 2002, 10:24:37) [MSC 32 bit (Intel)]'
moduleNames 只是一个字符串列表。没什么特别的,只是这些名字刚好是你可应需而用的可导入模块名。
简单得令人惊奇,通过映射 __import__ 就实现了导入。记住,列表 (moduleNames) 的每个元素将被用来一次次调用函数 (__import__) 并以一个返回值构成的列表作为返回结果。
所以现在你已经由一个字符串列表构建起了一个实际模块的列表。(你的路径可能不同,这取决于你的操作系统、你安装 Python 的位置、月亮残缺的程度等等。)
从这些是真实模块这一点出发,时时彩计划软件公式:让我们来看一些模块属性。记住,modules[0] sys 模块,因此,modules[0].version sys.version。所有模块的其他属性和方法也都可用。import 语句没什么神奇的,模块也没什么神奇的。模块就是对象,一切都是对象。

现在,你应该能够把这一切放在一起,并搞清楚本章大部分样例代码是做什么的。

重庆时时彩走势图网 送彩金的时时彩 怎样判断时时彩开单双 江西时时彩投注购彩 时时彩遗漏统计助手
最准的时时彩软件 时时彩骗人网站 时时彩第三方支付平台 时时彩万能六码 时时彩走势图带连线
江西十一五个1344期 时时彩胆码计划软件 飞哥时时彩实战 时时彩四星大小走势图 晴天彩票软件破解版
金盾江西时时彩 黑彩票平台提现技巧 时时彩平台如何搭建 时时彩软件网站 宝赢时时彩软件怎么用
河南快赢481开奖视 陕西十一选五最大遗漏 试机号3d 宁夏十一选五开结果 时时彩平台机选
金牌赌场 pk10开奖直播 澳门金沙赌场 pk10论坛 北京赛车pk10下载
一定牛北京十一选五 3d试机号参考 河南快3开奖结果一定牛 广东十一选五网易 广西快3遗漏走势图
乒乓球比赛规则 广东36选7走势图 辽宁十一选五专家推荐号 云南快乐10分钟开奖结果 甘肃快3