模块

一、认识模块

1、什么是模块?

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

import 加载的模块分为四类:

(1)使用Python编写的代码(.py文件);

(2)已被编译为共享库或DLL的C或C++扩展;

(3)包好一组模块的包;

(4)使用c编写并连接到Python解释器的内置模块;

2、为何要用模块?

(1)如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

(2) 随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用,

3、模块的导入和使用

注意:模块的导入应该在程序开始的地方!

模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块可以import很多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句

 

我们可以通过sys.modules查看已经加载的模块;sys.modules是一个字典,内部包含模块名与模块对象的映射,该字典决定了导入模块时是否需要重新导入;

4、文件中变量与导入模块中文件变量

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

5、为模块起别名

实例一:

有两中sql模块mysql和oracle,根据用户的输入,选择不同的sql功能;

1 db_type = input(">>> : ")
2 if db_type == "mysql":
3     import mysql as db 
4 elif db_type == "oracle"
5     import oracle as db 
6 db.sqlparse()

6、一行导入多个模块 

import sys, os, re

7、 from....import.....

对比import my_module,会将源文件的名称空间'my_module'带到当前名称空间中,使用时必须是my_module.名字的方式,而from 语句相当于import,也会创建新的名称空间,但是将my_module中的名字直接导入到当前的名称空间中,在当前名称空间中,直接使用名字就可以了;

 8、from .....import * 一般情况下不提倡这种导入方式

from my_module import * 把my_module中所有的不是以下划线(_)开头的名字都导入到当前位置,大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题;

9、在my_module 中新增一行 __all__ = ["money", "read1"] 这样在另外一个文件中from my_module import *  这能导入列表中规定的两个名字,也只能导入列表中规定的两个;

10、*如果my_module.py中的名字前加_,即_money,则from my_module import *,则_money不能被导入

11、循环引用问题——暂时没弄明白

12、模块的加载与修改

 

 

 

 

 

 

 

 

 

posted on 2018-07-05 21:45  zl666张良  阅读(373)  评论(0)    收藏  举报