模块 包

模块
一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀

模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行
我们可以从sys.modules中找到当前已经加载的模块,sys.modules是一个字典,内部包含模块名与模块对象的映射,该字典决定了导入模块时是否需要重新导入。

冲突问题
每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,
这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突

首次导入模块my_module时会做三件事
1为源文件创建名称空间
2在新创建的命名空间中执行模块中包含的代码
3创建变量指向该空间

为模块起别名
if file_format == 'xml':
     import xmlreader as reader
elif file_format == 'csv':
     import csvreader as reader
data=reader.read_date(filename)
示范

一行可以导入多个模块,但不建议这么做

from  ... import  ...

from 语句相当于import,也会创建新的名称空间,但是将my_module中的名字直接导入到当前的名称空间中,

在当前名称空间中,直接使用名字就可以了

python中的变量赋值不是一种存储操作,而只是一种绑定关系

 

注意   *  与  __all__['字符串类型的变量名']

模块的循环引用问题  可以循环 但不建议,会出问题

 

我们可以通过模块的全局变量__name__来查看模块名:
当做脚本运行:
__name__ 等于'__main__'
当做模块导入:
__name__= 模块名
作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__':

模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块

 

 

 

posted @ 2019-04-04 18:18  我的IT007  阅读(105)  评论(0编辑  收藏  举报