python模块导入import详解.md
一.什么是模块
模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个
模块。
模块的本质就是一个.py文件,里面包含已经封装好的类、方法等。模块导入也即是使用这个py文件中的变量、方法。
代码执行到模块导入位置时,会预先加载(执行)导入的模块。
二.分类
1.按位置分
- 常见的内置模块
python源码之中内置的模块,常见的有 time、random、os、mutilprocessing等
http://python.jobbole.com/86332/ - 外部安装的模块
比如python写游戏的pygame模块、连接mysql数据库的pymysql模块等。
一般导入方式:
1. pip install 模块名(虚拟环境使用较多)
2. pycharm的setting --> plugins
注意:使用from导入变量,而那些变量碰巧和作用域中现有的变量同名,本地变量就会被悄悄地覆盖掉
2.按功能分
例如:时间模块time带有多个时间方面的函数,而random模块主要是实现随机功能。
三.模块的导入方式
python语言中主要有三种方式
1.import
有5种形式:
import 模块(import 模块.方法 错误)
import 模块 as 别名
from 模块 import 方法(变量)
from 模块 import 方法(变量) as 别名
from 模块 import *
注意:模块名一般为文件名,且符合python标识符规则(由数字字母下划线组成,数字不能开头)
import time
a = time.time()
print(a)
2. _import_
# 参数为模块名
module = __import__("time")
print(module.time())
3.getattr
# 参数一为模块对象,参数二为模块方法
module_fun = getattr(time, 'time')
print(module_fun())
使用案例
# 框架思想
import sys
action_list = sys.argv # 得到一个列表
moudle = __import__(action_list[1])
fun = getattr(moudle, action_list[2])
print(fun())
四.模块的存储位置
1.常见系统路径
当你导入一个模块,Python解析器对模块位置的搜索顺序如下
import sys
print(sys.path)
#结果
[
'', #当前路径
'/home/yz/desktop/test', #项目路径
'/usr/lib/python35.zip',
'/usr/lib/python3.5',
'/usr/lib/python3.5/plat-x86_64-linux-gnu',
'/usr/lib/python3.5/lib-dynload',
'/usr/local/lib/python3.5/dist-packages',
'/usr/lib/python3/dist-packages'
]
2.查询某个模块的路径
import random
random.__file__
#结果
'/usr/lib/python3.5/random.py'
3.更改模块路径
注意:路径的修改只对当前文件有效
五.实际应用
1. 重新载入
在终端命令行之中,A导入模块B,当B修改之后,A仍然使用B被修改之前的代码。
这个时候就需要重新导入。使用reload
form importlib import reload
reload(模块名)
2. 浅拷贝导入
“import 模块”属于浅拷贝,如果A修改了导入的B变量,此时c导入该B变量还是未修改的B.
3. 循环导入
circular import异常:A导入B,B导入C,而C又导入A,这样构成了一个死循环。
解决:
1. 在函数方法内部导入B,错开导入代码的执行顺序
2. A、B©文件合并或者找一个D文档来分离A/B/C。
六. 模块与包
清楚模块与包的区别!
1.模块:单个的py文件
2.包:含有__init__.py文件的文件夹。里面一般有多个.py文件。
注意:如果包的__init__.py文件是空的,则 “from 包 import * ” 是无效的。
七. __all__和__name__
- 对于 ‘from 模块 import *’:A文件里有一个列表__all__=[ ],那么其它文件只能导入A文件中列表__all__的元素限定的变量。
- _name_
if __name__ == '__main__'
在A文件中,其属性__name__的值是_main_;而在其它文件中,导入的A.__name__的值是A的文件(模块)名。