一、任务描述
本实验任务主要对Python模块进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python的模块,并对Python模块的基本操作进行整理并填写工作任务报告。
二、任务目标
1、掌握Python模块
三、任务环境
Ubuntu16.04、Python2.7
四、任务分析
模块(module)是Python中非常重要的一个概念,模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中,我们就可以使用了。这类似于C语言中的include头文件,Python中我们用import导入我们需要的模块。
五、任务实施
步骤1、环境准备
右击Ubuntu操作系统桌面,从弹出菜单中选择【Open in Terminal】命令 打开终端。
通过【cd /home】切换到home目录下。【ls】查看该目录下的所有内容。

【mkdir module】在home目录下创建module文件夹。

步骤2、搜索路径
当导入一个模块,Python 解析器对模块位置的搜索顺序是:
1、当前目录
2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
【cd module】切换到module目录下,【ipython】切换到ipython的解释器。

用import导入需要的模块。类似于头文件,模块也是需要系统的搜索路径的,下面的命令即是系统默认的搜索路径,当导入一个模块时,系统就会在下面的路径列表中搜索相应的文件。

假如没有搜到相应内容就会报错。

步骤3、模块导入
【vim module1.py】回车后创建并编辑名为module1的Python文件

回车后进入编辑框内,按键盘【i】进入编辑状态,输入如下程序。
定义全局变量age,定义sayHello()函数,在主函数内调用sayHello()方法。

编辑完毕后,按【esc】退出编辑状态,【:wq】保存并退出编辑框,在退出后的窗口内输入【ipython】切换到ipython的解释器。

【import module1】导入新建的Python模块。一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
【module1.age】调用模块内的变量。
【module1.sayHello()】调用模块内的函数。

通过【exit()】退出ipython解释器,再次通过【ipython】进入ipython解释器。输入如下程序。
【from module1 import *】 把一个模块的所有内容全都导入到当前的命名空间,一次性导入。

也可以从模块中导入一个指定的部分到当前命名空间中。
注意两种方法的不同。 From 并没有把sayHello()函数 引进来,所以当前namespace没有sayHello()这个name。所以报错。

步骤4、命令空间
命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。也就是可以把一个namespace理解为一个字典,实际上很多当前的Python实现namespace就是用的字典。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间可以有重名并且没有任何影响。
【vim module2.py】回车后创建并编辑名为module2的Python文件

回车后进入编辑框内,按键盘【i】进入编辑状态,输入如下程序。
global Money 的表达式会告诉 Python, Money 是一个全局变量,这样 Python 就不会在局部命名空间里寻找这个变量了。

编辑完毕后,按【esc】退出编辑状态,【:wq】保存并退出编辑框。【ipython】进入ipython解释器。
一个模块的name space是这个module被import的时候创建的。每个module都有一个_name_
的attribute,用来表示当前module的名字。
dir() 函数一个排好序的字符串列表,内容是一个模块里定义过的名字。
