Python中的模块和包的导入

1.model和package:一个.py文件就称为一个model,包是一个文件夹,其中包含__init__.py文件和其他.py文件,或其他子包

2.模块的导入:使用import 模块名。包的导入可以使用import 或from import  导入

3.使用import a,b,c可以同时导入多个模块或包

4.使用 as可以改变导入模块的名字 如 import sys  as s 即可将sys使用 s 来代替,或from math import random as  r

5.from语句支持逗号分割的对象,也可以使用星号(*)代表模块中除下划线开头的所有对象,不过,如果一个模块如果定义有列表__all__,则from module import * 语句只能导入__all__列表中存在的对象

6.导包语句可以在py文件中任意位置使用,也可多次重复导入,但是只在第一次导入时执行,

7.from module import * 语句只能用于一个模块的最顶层.*特别注意*:由于存在作用域冲突,不允许在函数中使用from 语句

8.导入模块时,解释器会搜索sys.path列表,这个列表中保存着一系列目录,可以通过sys.path.append()方法添加模块到搜索路径,或使用sys.path.insert(0,路径字符串)插入到列表中。

9.重新导入模块:如果更新了一个已经用import语句导入的模块,内建函数reload()可以重新导入并运行更新后的模块代码.它需要一个模块对象做为参数,在reload()运行之后的针对模块的操作都会使用新导入代码,不过reload()并不会更新使用旧模块创建的对象,因此有可能出现新旧版本对象共存的情况。 *注意* 使用C或C++编译的模块不能通过 reload() 函数来重新导入

导入原理

使用import spam 语句就可以将这个文件作为模块导入。系统在导入模块时,要做以下三件事:

1.为源代码文件中定义的对象创建一个名字空间,通过这个名字空间可以访问到模块中定义的函数及变量。
2.在新创建的名字空间里执行源代码文件.
3.创建一个名为源代码文件的对象,该对象引用模块的名字空间,这样就可以通过这个对象访问模块中的函数及变量

使用from语句可以将模块中的对象直接导入到当前的名字空间. from语句不创建一个到模块名字空间的引用对象,而是把被导入模块的一个或多个对象直接放入当前的名字空间

1.import 最终导入的是个模块或者包,而不能是模块中的对象

2.from a.b import *中*代表所有,b中如果仍然有模块就会报错,因为指向不明,需要在b中的__init__.py中添加__all__变量,指定要导入的模块