1、学院 系部名称主讲:授课教师 姓名Python 基础教程第第 6 6章章 代码复用代码复用模块模块 Python基础编程Python 中,库 Library、包 Package、模块 Module,统称为模块。Python 自带了功能丰富 的标准库,另外还有数量庞大的各种第三方库。使用这些功能的基本方法就是使用模块。通 过函数,可以在程序中重用自己的代码;通过模块,则可以重用别的程序中的代码。本章的 目标是掌握模块的使用。第 6章 代码复用模块 Python基础编程【教学导航】【教学导航】学习目标学习目标1 1了解了解模块模块的的概念的的概念2 2掌握模块的使用掌握模块的使用 3 3了解包的概
2、念了解包的概念 4 4掌握常用模块的操作掌握常用模块的操作教学重点教学重点模块的使用、常用模块的操作教学方式教学方式案例教学法、分组讨论法、自主学习法、探究式训练法 课时建议课时建议6课时Python基础编程本章主要内容Python 中的包中的包模块概述模块概述模块的使用模块的使用123常用模块介绍常用模块介绍 4实训实训65Python基础编程第 6章 代码复用模块 模块是一个保存了模块是一个保存了 Python Python 代码的文件。模块能定义函数代码的文件。模块能定义函数、类和变量。模块中也能包含可、类和变量。模块中也能包含可 执行的代码。模块分为执行的代码。模块分为三种:自定义模块
3、、内置标准模块、开源模块(第三方三种:自定义模块、内置标准模块、开源模块(第三方)。v 学习目标学习目标 1 1了解模块的定义了解模块的定义 2 2了解命名空间与模块的关系了解命名空间与模块的关系Python基础编程6.1.1 6.1.1 模块定义模块定义 模块(模块(ModuleModule)是用来组织)是用来组织 Python Python 程序代码的一种程序代码的一种方法。当程序的代码量比较大时,可以将代码分成多个彼方法。当程序的代码量比较大时,可以将代码分成多个彼此联系又相互独立的代码段,而每个代码段可能包含数据此联系又相互独立的代码段,而每个代码段可能包含数据成员和方法的成员和方法的
4、 类(类(“数据成员和方法的类数据成员和方法的类”是面向对象是面向对象程序设计的说法,在没有面向对象程序设计的基础时,程序设计的说法,在没有面向对象程序设计的基础时,可以理解为数据和程序代码的总和)。这样的代码段是共可以理解为数据和程序代码的总和)。这样的代码段是共享的,所以可将代码段通过导入享的,所以可将代码段通过导入 (ImportImport)的手段加入)的手段加入到正在编写的程序中,让程序使用模块中这些可共享的代到正在编写的程序中,让程序使用模块中这些可共享的代码段。这样看码段。这样看 来,模块是一个包含诸多可共享的代码段来,模块是一个包含诸多可共享的代码段的组织单位。的组织单位。还有
5、一个更大的单位,称为包,它是用来组织模块的还有一个更大的单位,称为包,它是用来组织模块的。Python基础编程6.1.1 6.1.1 模块定义模块定义 模块的概念是站在逻辑结构层面建立的概念,它在磁模块的概念是站在逻辑结构层面建立的概念,它在磁盘中的存在形式仍然是文件。模块盘中的存在形式仍然是文件。模块 的文件名就是模块名的文件名就是模块名加上扩展名加上扩展名.py.py。模块文件名应尽量使用小写命名,首字。模块文件名应尽量使用小写命名,首字母保持小写,尽母保持小写,尽 量不要用下画线(除非多个单词,且数量不要用下画线(除非多个单词,且数量不多的情况)量不多的情况)模块可以理解为是一个包含了函
6、数和变量的模块可以理解为是一个包含了函数和变量的 pypy文件文件。在你的程序中引入了某个模块,就。在你的程序中引入了某个模块,就 可以使用其中的函可以使用其中的函数和变量。数和变量。模块也是模块也是 Python Python 对象,具有随机的名字属性用来绑对象,具有随机的名字属性用来绑定或引用。定或引用。简单地说,模块就是一个保存了简单地说,模块就是一个保存了 Python Python 代码的文件代码的文件。模块中能定义函数、类和变量。模块也能包含可执行的。模块中能定义函数、类和变量。模块也能包含可执行的代码。代码。Python基础编程6.1.1 6.1.1 模块定义模块定义 库:具有相
7、关功能模块的集合。这也是库:具有相关功能模块的集合。这也是 Python Python 的一大特色,即的一大特色,即具有强大的标准库、第三具有强大的标准库、第三 方库及自定义模块。方库及自定义模块。标准库:就是下载安装的标准库:就是下载安装的 Python Python 中那些自带的模块,要注意的中那些自带的模块,要注意的是,里面有一些模块是看是,里面有一些模块是看 不到的,比如像不到的,比如像 sys sys 模块,这与模块,这与 Linux Linux 下下看不到看不到 cd cd 命令是一样的。命令是一样的。第三方库:就是由其他的第三方机构发布的具有特定功能的模块第三方库:就是由其他的第
8、三方机构发布的具有特定功能的模块。自定义模块:用户可以自行编写模块,然后使用。自定义模块:用户可以自行编写模块,然后使用。Python基础编程6.1.26.1.2命名空间命名空间 命名空间是名称(标识符)到对象的映射。模块有自己唯一的命命名空间是名称(标识符)到对象的映射。模块有自己唯一的命名空间。名空间。变量作用域就是变量的使用范围。确定一个变量的作用域,首先变量作用域就是变量的使用范围。确定一个变量的作用域,首先要确定变量是否在其局要确定变量是否在其局 部命名空间,不在其局部命名空间时,再查部命名空间,不在其局部命名空间时,再查找是否在全局命名空间,最后在内置命名空间中找是否在全局命名空间
9、,最后在内置命名空间中 查找。因此,变量查找。因此,变量作用域与命名空间是有关联的。作用域与命名空间是有关联的。如果用户自己创建了一个模块如果用户自己创建了一个模块 mymodulemymodule,并且用户要在程序中使用,并且用户要在程序中使用模块模块 mymodule mymodule 中的中的 函数(方法)函数(方法)fun()fun(),则需要使用,则需要使用 mymodule.mymodule.fun()fun()形式,这实际上是指定了模块的命名空间。形式,这实际上是指定了模块的命名空间。即使在不同的模即使在不同的模块中有相同的函数(方法),因为使用了命名空间,也不至于产生使块中有相
10、同的函数(方法),因为使用了命名空间,也不至于产生使用上的用上的 冲突。冲突。Python Python 系统提供了几个内置函数用于支持模块。它们是:系统提供了几个内置函数用于支持模块。它们是:_import_()_import_()函数,它能实现与函数,它能实现与 import import 语句相同的功能;语句相同的功能;globals()globals()和和 locals()locals()函数,分别返回调用者的全局命名空间或函数,分别返回调用者的全局命名空间或局部命局部命 名空间。名空间。Python基础编程 6.2 6.2 模块的使用模块的使用 在Python解释器上不能直接使用函
11、数库中的函数,因为这些函数都封装在某一函数库中,要使用库中的某一函数,先要导入相应的函数库,或者称导入模块。v 学习目标学习目标 1 1了解模块的导入了解模块的导入 2 2掌握模块多种导入方式掌握模块多种导入方式 3 3了解模块的定位了解模块的定位 4 4掌握模块的查找掌握模块的查找 5 5了解自定义模块时外层代码的处理了解自定义模块时外层代码的处理 Python基础编程6.2.1 6.2.1 模块导入模块导入 模块使用前需要导入,导入后才能执行。所模块使用前需要导入,导入后才能执行。所谓执行,就是被导入的模块中定义的全局变谓执行,就是被导入的模块中定义的全局变 量被量被赋值、类及函数的声明将
12、被执行。赋值、类及函数的声明将被执行。导入模块使用导入模块使用 import import 语句和语句和 fromimport fromimport 语句。导入方法有以下三种。语句。导入方法有以下三种。方法方法 1 1:import import 方法方法 2 2:import import as as 方法方法 3 3:from from import import|*Python基础编程6.2.1 6.2.1 模块导入模块导入 对于第(对于第(1 1)种方法,使用函数时要写成:)种方法,使用函数时要写成:.;对;对于第(于第(2 2)种方法,使用)种方法,使用 函数时要写成:函数时要写成:
13、.;对;对于第(于第(3 3)种方法,直接写函数名就行。)种方法,直接写函数名就行。1 1import import 语句语句 想使用想使用 Python Python 源文件,只需在另一个源文件中源文件,只需在另一个源文件中执行执行 import import 语句,语法如下:语句,语法如下:import import 使用使用 import import 语句可以导入整个模块。语句可以导入整个模块。例如:例如:import sys import sys 这是导入这是导入 Python Python 标准库的标准库的 sys sys 模块。模块。sys sys 模块提供了许多函数模块提供了许
14、多函数和变量来处理和变量来处理 Python Python 运行运行 时环境的不同部分。时环境的不同部分。Python基础编程6.2.1 6.2.1 模块导入模块导入 import 语句执行的过程是:在搜索路径中找到指定的模块,然后加载该模块。如果在一 个程序的顶层导入指定模块,则所指定模块的作用域是全局的;如果在函数中导入,那么它 的作用域是局部的。搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 hello.py,需要 把命令放在脚本的顶端。当解释器遇到 import 语句,如果模块在当前的搜索路径中就会被 导入,如例 6-2-1 所示。Python基础编程6.2.1 6.
15、2.1 模块导入模块导入 以上实例输出结果如下:1.4142135623730951 导入模块后,必须要通过“模块名.函数名”调用模块中的函数,不能直接使用模块中的 函数名,否则会报错,如上例中,直接使用“print(sqrt(2)”语句,将报“name sqrt is not defined”错误。因为在当前命名空间下,不包括 sqrt()函数的定义。不管执行了多少次 import。一个模块只会被导入一次,这样可以防止导入模块被一遍又 一遍地执行。Python基础编程6.2.1 6.2.1 模块导入模块导入 2import as语句 在例 6-2-1 中,使用 import math 导入数
16、学模块,此时调用函数时,函数前面需要添加模 块名,如 math.sqrt()。如果模块名字比较长或名称可能重复,或不想直接使用模块名进行调 用,这时可以使用 import as语句,语法如下:import as 使用 as 创建别名,然后再通过别名进行模块内函数调用,调用格式为“别名.函数名”。操作如例 6-2-2 所示。例 6-2-2 导入数学模块。Python基础编程6.2.1 6.2.1 模块导入模块导入 以上实例输出结果如下:以上实例输出结果如下:3 3fromimport fromimport 语句语句 有时候,需要在默认空间下直接使用某模块的相关函数,此时有时候,需要在默认空间下直
17、接使用某模块的相关函数,此时可以使用可以使用 from import from import 语句。语句。Python Python 的的 from from 语句从模语句从模块中导入一个指定的部分到当前命名空间中。语法如下:块中导入一个指定的部分到当前命名空间中。语法如下:from from import import 例如,要导入数学模块例如,要导入数学模块 math math 的的 sqrt sqrt 函数,使用如下语句:函数,使用如下语句:from math import sqrt from math import sqrt Python基础编程6.2.1 6.2.1 模块导入模块导入
18、 这个声明不会把整个这个声明不会把整个 math math 模块导入到当前的命名空间中,它会将模块导入到当前的命名空间中,它会将 math math 中的中的 sqrt sqrt 单个引单个引 入到执行这个声明的模块的全局符号表,此时,不入到执行这个声明的模块的全局符号表,此时,不可使用可使用“模块名模块名.函数名函数名”进行调用,需进行调用,需 直接使用从模块中导入的函数名直接使用从模块中导入的函数名。实例如例。实例如例 6-2-3 6-2-3 所示所示 例例 6-2-3 6-2-3 导入数学模块中的单个函数到当前命名空间。导入数学模块中的单个函数到当前命名空间。以上实例输出结果如下:以上实
19、例输出结果如下:4 4fromimport fromimport*语句语句 fromimportfromimport*语句的语法格式如下:语句的语法格式如下:from from 模块名模块名 import import*fromimport fromimport*语句可以导入模块的某些属性,也可以使用语句可以导入模块的某些属性,也可以使用“from from module import module import*”导入导入 所有属性。所有属性。Python基础编程6.2.1 6.2.1 模块导入模块导入 把一个模块的所有内容全都导入到当前的命名空间也是可行的,如导把一个模块的所有内容全都导入
20、到当前的命名空间也是可行的,如导入入 math math 模块的全部模块的全部 内容,只需使用如下声明:内容,只需使用如下声明:from math import from math import*这提供了一个简单的方法来导入一个模块中的所有项目。使用这种导这提供了一个简单的方法来导入一个模块中的所有项目。使用这种导入方法和第三种方入方法和第三种方 式相似,也不可使用式相似,也不可使用“模块名模块名.函数名函数名”进行调用,需进行调用,需直接使用模块中的函数名。然而这种直接使用模块中的函数名。然而这种 声明不该被过多地使用,否则内存消声明不该被过多地使用,否则内存消耗比较大。耗比较大。Pytho
21、n基础编程6.2.2 6.2.2 模块定位查找模块定位查找 1 1定位模块定位模块 当导入一个模块,当导入一个模块,Python Python 解释器对模块位置的搜索顺序是:解释器对模块位置的搜索顺序是:当前目录。当前目录。如果不在当前目录,如果不在当前目录,Python Python 则搜索在则搜索在 shell shell 变量变量 PYTHONPATH PYTHONPATH 下下的每个目录。的每个目录。如果还找不到,如果还找不到,Python Python 会查看默认路径。会查看默认路径。Windows Windows 下,默认路径一下,默认路径一般是般是 Python Python 安
22、装路安装路 径。径。UNIX UNIX 下,默认路径一般为下,默认路径一般为/usr/local/lib/usr/local/lib/python/python/。模块搜索路径存储在模块搜索路径存储在systemsystem模块的模块的sys.pathsys.path变量中。变量中包含当变量中。变量中包含当前目录、前目录、PYTHONPATH PYTHONPATH 和由安装过程决定的默认目录。和由安装过程决定的默认目录。Python基础编程6.2.2 6.2.2 模块定位查找模块定位查找 2 2模块的查找模块的查找 当用户需要导入一个模块时,用户会使用当用户需要导入一个模块时,用户会使用imp
23、ortimport命令命令在搜索路径中查找指定模块的文件名。在搜索路径中查找指定模块的文件名。搜索路径是一个特定目录的集合,搜索路径是一个特定目录的集合,Python Python 系统只在这系统只在这些特定的搜索路径中查找模块文件些特定的搜索路径中查找模块文件 名。这个特定的目录是名。这个特定的目录是 Python Python 系统安装时确定的默认搜索路径。系统安装时确定的默认搜索路径。默认搜索路径被保存在默认搜索路径被保存在 sys sys 模块的模块的 sys.path sys.path 变量中变量中,用户可以使用命令查看。实例如例,用户可以使用命令查看。实例如例 6-2-4 6-2-
24、4 所示。所示。例例 6-2-4 6-2-4 查看查看 Python Python 默认搜索路径。默认搜索路径。Python基础编程6.2.2 6.2.2 模块定位查找模块定位查找 以上实例输出结果如下:这是前面页命令产生的结果,是一个列表。可以通过 append()方法向 sys.path 变量中增加一个目录:sys.path.append(要增加的目录路径)如果是用户自己建立的模块,应该将模块的文件(例如前面说的 mymodule.py)存放在 指定的目录中。Python基础编程6.2.2 6.2.2 模块定位查找模块定位查找 当当 Python Python 系统解释器在标准模式下启动时
25、,一些模系统解释器在标准模式下启动时,一些模块会被解释器自动导入,它们是与系块会被解释器自动导入,它们是与系 统操作相关联的模块统操作相关联的模块,如:,如:builtins builtins 模块。模块。Python Python 中有些内置函数,不需要导入模块,就可以直中有些内置函数,不需要导入模块,就可以直接使用,例如接使用,例如 abs()abs()。Python基础编程6.2.3 6.2.3 自定义模块调用自定义模块调用 在规范的代码中,通常都会有一句在规范的代码中,通常都会有一句“if_name_=_main_if_name_=_main_:”作为程序的入口,但到作为程序的入口,但
26、到 目前为止,发现没有这么一句代码,程目前为止,发现没有这么一句代码,程序也能正常运行。序也能正常运行。Python Python 文件有两种使用的方法,第文件有两种使用的方法,第 一是直接作为一是直接作为脚本执行,第二是脚本执行,第二是 import import 到其他的到其他的 Python Python 脚本中被调用(模块重脚本中被调用(模块重用)执行。之用)执行。之 前,所有的任务练习都采用第一种方法,直接作为脚前,所有的任务练习都采用第一种方法,直接作为脚本执行。但实际上,模块就是一个普通本执行。但实际上,模块就是一个普通 的的 Python Python 程序文件,任何程序文件,
27、任何一个普通的一个普通的 Python Python 文件都可以作为模块导入。在文件都可以作为模块导入。在 Python Python 文件作为文件作为 模块导入的时候,有些代码不能被执行,否则会出问题。模块导入的时候,有些代码不能被执行,否则会出问题。采用采用“if _name_=_main_if _name_=_main_:”写法,表示如果是外部文写法,表示如果是外部文件调用,不执行此处代码。件调用,不执行此处代码。_name_name_是指示当前是指示当前 pypy文件调用方式的文件调用方式的方法。如果它等于方法。如果它等于“_main_”_main_”就表示直接执行,如就表示直接执行,
28、如 果不是,则用果不是,则用来被别的文件调用,这个时候来被别的文件调用,这个时候 if if 判断结果就为判断结果就为 FalseFalse,那么就不执,那么就不执行外层的代码。行外层的代码。Python基础编程6.2.3 6.2.3 自定义模块调用自定义模块调用 “if _name_=main “if _name_=main:”的作用就是控制这两种情况执行代的作用就是控制这两种情况执行代码的过程,在码的过程,在“if _name_=mainif _name_=main:”下的代码只有在第一种下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而情况下(即文件作为脚本直接执行)才会
29、被执行,而 import import 到其他到其他脚本中是不会被执行的。操作实例如例脚本中是不会被执行的。操作实例如例 6-2-5 6-2-5 所示。所示。例 6-2-5 创建 stu.py文件,代码如下:以上实例输出结果如下:Python基础编程6.2.3 6.2.3 自定义模块调用自定义模块调用 直接执行直接执行 stu.pystu.py,结果如上,输出列表原始数据和学生信息,结果如上,输出列表原始数据和学生信息两行字符串。即,两行字符串。即,“if _name_=_main_if _name_=_main_:”语句之前和之后语句之前和之后的代码都被执行。的代码都被执行。然后在同一文件夹
30、新建名称为然后在同一文件夹新建名称为 import_stu.pyimport_stu.py的脚本中,输的脚本中,输入如下代码:入如下代码:import stu import stu 执行执行 import_stu.pyimport_stu.py脚本,输出结果如下:脚本,输出结果如下:stu_age:18,stu_id:1,stu_name:stu_age:18,stu_id:1,stu_name:张三张三 结果中只输出了列表数据。即,结果中只输出了列表数据。即,“if _name_=_main_if _name_=_main_:”之前的语句被执行,之后之前的语句被执行,之后 的没有被执行。的没
31、有被执行。Python基础编程6.2.3 6.2.3 自定义模块调用自定义模块调用 每个每个 Python Python 模块(模块(Python Python 文件,也就是此处的文件,也就是此处的 stu.py stu.py 和和 import_stu.pyimport_stu.py)都包含内置的变)都包含内置的变 量量_name_name_。当运行模块被执行时。当运行模块被执行时,_name_name_等于文件名(包含了后缀等于文件名(包含了后缀.py.py);如果);如果 import import 到到 其他模其他模块中,则块中,则_name_name_等于模块名称(不包含后缀等于模块
32、名称(不包含后缀.py.py)。而)。而 “_main_”_main_”等于当前执行文等于当前执行文 件的名称(包含了后缀件的名称(包含了后缀.py.py),进而当),进而当模块被直接执行时,模块被直接执行时,“_name_=main”_name_=main”的结果为真。的结果为真。示例如示例如下。下。复制复制stu.pystu.py代码,保存为代码,保存为stu1.pystu1.py,在,在stu1.pystu1.py程序的程序的“if if _name_=_main_name_=_main_:”之前加入之前加入“printprint(_name_name_)”,即将,即将_name_nam
33、e_打印出来。文件内容和结果如下:打印出来。文件内容和结果如下:可以看出,此时变量可以看出,此时变量_name_name_的值为的值为“_main_”_main_”,然后在同一文件,然后在同一文件夹中新建名称为夹中新建名称为import_stu1.pyimport_stu1.py的脚本,输入如下代码:的脚本,输入如下代码:Python基础编程6.2.3 6.2.3 自定义模块调用自定义模块调用 import stu1 import stu1 执行执行import_stu1.pyimport_stu1.py脚本,输出结果如下:脚本,输出结果如下:stu_name:stu_name:张三张三,st
34、u_id:1,stu_age:,stu_id:1,stu_age:18 stu118 stu1 然后在同一文件夹中新建名称为然后在同一文件夹中新建名称为import_stu.pyimport_stu.py的的脚本,只输入如下代码:脚本,只输入如下代码:import stu import stu 执行执行import_stu.pyimport_stu.py脚本,输出结果如下:脚本,输出结果如下:stu_age:18,stu_name:stu_age:18,stu_name:张三张三,stu_id:,stu_id:11 此时,此时,test.pytest.py中的中的_name_name_变量值为
35、变量值为stu1stu1,不满,不满足足_name_=_main_name_=_main_的条件,因此,无法执行其的条件,因此,无法执行其后的代码,不能输出后的代码,不能输出“stul”stul”Python基础编程6.3 Python中的包 变量的作用域是Python 学习中一个必须理解和掌握的知识。本节从局部变量和全局变量开始全面解析Python 中的变量作用域。v 学习目标学习目标 1 1了解包的概念了解包的概念 2 2掌握包的使用掌握包的使用Python基础编程6.3.1包的概念 包是在模块之上的概念,为了方便管理而将文件进行打包。包目包是在模块之上的概念,为了方便管理而将文件进行打包
36、。包目录下第一个文件便是录下第一个文件便是_init_.py,然后是一些模块文件和子目录,然后是一些模块文件和子目录,假如子目录中也有假如子目录中也有 _init_.py,那么它就是这个包的子包了。,那么它就是这个包的子包了。常见的包结构如图常见的包结构如图6-3-1所示。包结构所示。包结构 是一个分层次的文件目录结是一个分层次的文件目录结构,它定义了一个由模块及子包和子包下的子包等组成的构,它定义了一个由模块及子包和子包下的子包等组成的Python的的应用环境。应用环境。包是模块更上一层的概念,一个包可以包含多个模块。包能够帮助用包是模块更上一层的概念,一个包可以包含多个模块。包能够帮助用户
37、将有联系的模块组织在一个包内;同时还可以解决模块名冲突。户将有联系的模块组织在一个包内;同时还可以解决模块名冲突。图图6-3-1 常见的包结构常见的包结构Python基础编程6.3.1包的概念当模块名或者包名过长时,为了后面的程序编写,可以给其取别名,格当模块名或者包名过长时,为了后面的程序编写,可以给其取别名,格式如下式如下import包名包名as别名别名 建立包的方法为:在建立包的方法为:在Python的工作目录下的的工作目录下的LIB子目录中建立一个目子目录中建立一个目录,这个建立的目录名就是包的名字,将模块置入包(目录)内。录,这个建立的目录名就是包的名字,将模块置入包(目录)内。有些
38、包中有内置函数,导入包名之后,可以直接通过有些包中有内置函数,导入包名之后,可以直接通过“包名包名.函数名函数名”来调用函数。来调用函数。我们知道包是模块的合集,如果使用到了包中的某些模块,一般情况我们知道包是模块的合集,如果使用到了包中的某些模块,一般情况下需要通过下需要通过“包名包名.模块名模块名.函数名函数名”来调用相应的函数,为了方便编写来调用相应的函数,为了方便编写程序,可以通过程序,可以通过“from包名包名import模块名模块名”直接导入模块,这样就不需直接导入模块,这样就不需要再写包名了。要再写包名了。如果包如果包 中还有子包的话,同样为了方便程序编写,可以通过中还有子包的话
39、,同样为了方便程序编写,可以通过“from包名包名.子包名子包名import模块名模块名”导入模块。导入模块。Python基础编程6.3.2包使用实例(1)创建一个目录)创建一个目录web,在,在web目录中写入目录中写入stu.py、tea.py、admin.py三三个文件。个文件。stu.py这个文件有如下源代码:这个文件有如下源代码:def Stu():print(Im a student)同样的,另外两个文件中的函数如下同样的,另外两个文件中的函数如下(2)tea.py含有函数含有函数Tea(),代码如下:,代码如下:def Tea():print(Im a teacher”)(3)a
40、dmin.py含有函数含有函数Admin(),代码如下:,代码如下:def Admin():print(Im a administrator)(4)在在web目录下创建空文件,命名为目录下创建空文件,命名为_init_.py。Python基础编程6.3.2包使用实例 在不使用包的方式下,直接在在不使用包的方式下,直接在web目录下新建目录下新建Python文件,可以直接使文件,可以直接使用用stu.py、tea.py、admin.py这三个文件内容。这三个文件内容。第一种方式,新建第一种方式,新建py文件作启动文件,文件名可任意取,保存在文件作启动文件,文件名可任意取,保存在web目目录下,录
41、下,如例如例6-3-1所示。所示。例例6-3-1使用使用from.import.导入文件模块实例。导入文件模块实例。上述实例输出结果如下:上述实例输出结果如下:Im a studentIm a teacherIm a administratorPython基础编程6.3.2包使用实例 第二种方式,新建第二种方式,新建py文件作启动文件,文件名可任意取,保存在文件作启动文件,文件名可任意取,保存在web目录下,目录下,如例如例6-3-2所示。所示。例例6-3-2使用使用import导入文件模块实例。导入文件模块实例。例例6-3-2和例和例6-3-1实例输出相同,输出结果如下:实例输出相同,输出结
42、果如下:如上,为了举例,我们在每个文件中只放置了一个函数,但其实可以放置如上,为了举例,我们在每个文件中只放置了一个函数,但其实可以放置多个函数。也可以在这些文件中定义多个函数。也可以在这些文件中定义Python的类,然后为这些类创建一个的类,然后为这些类创建一个包。包。Python基础编程6.4常用模块介绍本节介绍time和calendar标准库、数学函数math及json模块,而random这个库是全国计算机等级考试二级Python语言程序设计考试大纲(2018年版)中第七部分Python计算生态中第1点(标准库)中必考的一个库。time标准库是选考的一个库。v学习目标 1 1了解并掌握了
43、解并掌握timetime标准库的使用标准库的使用 2 2了解并掌握了解并掌握calendarcalendar标准库的使用标准库的使用 3.3.了解并掌握了解并掌握mathmath模块的使用模块的使用 4.4.了解并掌握了解并掌握jsonjson数据的使用数据的使用Python基础编程6.4.1时间与日期 在数据的统计分析方面,时间是一个很重要的因素。很多时候,只考虑在数据的统计分析方面,时间是一个很重要的因素。很多时候,只考虑一定时期内的数据,时间对数据的有效性有很大影响。在数据分析时,一定时期内的数据,时间对数据的有效性有很大影响。在数据分析时,Python需要对数据的时效性有准确的把握。在
44、程序中,需要对数据的时效性有准确的把握。在程序中,Python能用很多方能用很多方式处理日期和时间数据。式处理日期和时间数据。Python提供了一提供了一 个个time和和calendar模块用来处理模块用来处理日期和时间。日期和时间。1time 模块模块time模块包含了以下内置函数,既有与时间处理相关的,也有用于模块包含了以下内置函数,既有与时间处理相关的,也有用于转换时间格式的,如表转换时间格式的,如表6-4-1所示。所示。序号序号函数及描述函数及描述1time.altzone返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治的东部会返回负值(如西欧,包括英国)。它对夏令时启用
45、地区才能使用2time.asctime(tupletime)接受时间元组并返回一个可读的形式为“Sat Jul 13 10:34:09 2019”(2019年7月13日周六18时07分14秒)的24个字符的字符串Python基础编程6.4.1时间与日期序号序号函数及描述函数及描述3time.clock()用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,它比time.time()更有用4time.ctime(secs)作用相当于asctime(localtime(secs),未给参数相当于asctime()5time.gmtime(secs)接收时间辍(1970纪元后经过的浮点
46、秒数)并返回格林威治天文时间下的时间元组t。注:t.tm_isdst始终为06time.localtime(secs)接收时间辍(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)7time.mktime(tupletime)接受时间元组并返回时间辍(1970纪元后经过的浮点秒数)8time.sleep(secs)推迟调用线程的运行,secs指秒数9time.strftime(fmt,tupletime)接收时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定Python基础编程6.4.1时间与日期time模块包含了
47、以下模块包含了以下2个非常重要的属性如表个非常重要的属性如表6-4-2所示。所示。表表6-4-2time模块属性值一览表模块属性值一览表序号序号函数及描述函数及描述10time.strptime(str,fmt=%a%b%d%H:%M:%S%Y)根据fmt的格式把一个时间字符串解析为时间元组11time.time()返回当前时间的时间戳(1970纪元后经过的浮点秒数12time.tzset()根据环境变量TZ重新初始化时间相关设置序号序号属性及描述属性及描述1time.timezone属性time.timezone是当地时区(未启动夏令时)距离格林威治的偏移秒数(0,美洲;=0大部分的欧洲、亚
48、洲、非洲)2time.tzname属性time.tzname包含一对根据情况的不同而不同的字符串,分别是带夏令时的本地时区名称,和不带夏令时的Python基础编程6.4.1时间与日期2ticks 计时单位计时单位 时间间隔是以秒为单位的浮点小数。时间间隔是以秒为单位的浮点小数。每个时间戳都以自从每个时间戳都以自从1970年年1月月1日午夜(历元)经过了多长时间来表示。日午夜(历元)经过了多长时间来表示。Python附带的受欢迎的附带的受欢迎的time模块下有很多函数可以转换常见日期格式。如模块下有很多函数可以转换常见日期格式。如函数函数time.time()用用ticks计时单位返回从计时单位
49、返回从12:00am,January 1,1970(epoch)开始记录的当前操作系统时间,如例)开始记录的当前操作系统时间,如例6-4-1所示。所示。例6-4-1时间戳实例。以上实例输出结果如下import time;当前时间戳是:#引用time模块1556120860.6987607 ticks=time.time()print(当前时间戳是:,ticks)ticks计时单位最适于日期运算,但是计时单位最适于日期运算,但是1970年之前的日期就无法以此表示。目年之前的日期就无法以此表示。目前,前,UNIX和和Windows只支持到只支持到2038年。年。Python基础编程6.4.1时间与
50、日期3时间元组使用localtime可以获取当前时间,获取的时间使用时间元组方式展示。从返回浮点数的时间戳 方式向时间元组转换,只要将浮点数传递给如localtime之类的函数。例6-4-2获取当前时间实例 以上实例输出结果如下 import time;当前时间是:localtime=time.localtime(time.time()time.struct_time(tm_year=2019,print(当前时间是:,localtime)tm_mon=4,tm_mday=28,tm_hour=8,tm_min=39,tm_sec=42,tm_wday=6,tm_yday=118,tm_isd