一、模块(modue):
1)模块的定义:用一堆代码实现了某个功能的代码集合
类似与函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合,而对于一个复杂的功能来说,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个.py文件组成的代码集合就称为模块,如:os是系统相关的模块,file是文件操作相关的模块
2)使用模块有什么好处
最大的好处是大大提高了代码的可维护性。
其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
3)模块分类
1)自定义模块
2)内置模块
3)开源模块(第三方模块)
另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。
二、介绍模块分类
1、自定义模块
1)情景
情景一
情景二
2)import导入方法
import: 1)执行对应的文件 2)引入变量名
(1) import 语句
import
module1[, module2[,... moduleN]
当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?答案就是解释器有自己的搜索路径,存在sys.path里。
1 2 |
|
因此若像我一样在当前目录下存在与要引入模块同名的文件,就会把要引入的模块屏蔽掉。
( 2) from…import 语句
|
这个声明不会把整个modulename模块导入到当前的命名空间中,只会将它里面的name1或name2单个引入到执行这个声明的模块的全局符号表。
(3) From…import* 语句
1 |
|
这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。大多数情况, Python程序员不使用这种方法,因为引入的其它来源的命名,很可能覆盖了已有的定义。
(4) 运行本质
1 2 |
|
无论1还是2,首先通过sys.path找到test.py,然后执行test脚本(全部执行),区别是1会将test这个变量名加载到名字空间,而2只会将add这个变量名加载进来。
过程:
导入模块其实就是在告诉Python解释器去解释那个py文件
如果导入的是一个py文件,解释器就解释该py文件
如果导入的是一个包,解释器就解释该包下的__init__.py文件
Python中,导入模块时是根据那个路径作为基准来进行的呢?
默认搜寻模块的地址:可通过sys模块中的sys.path来查看
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', '/usr/local/lib/python3.5', '/usr/local/lib/python3.5/plat-linux', '/usr/local/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/site-packages']
如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。
通过os模块可以获取各种目录
import sys
import os
pre_path = os.path.abspath('../')
sys.path.append(pre_path)
2、开源模块(第三方模块)
1)下载安装 -- 有两种方式
方法一 | 方法二 |
yum ... | 下载源码 |
pip ... | 解压源码 |
apt-get ... | 进入目录 |
编译源码 python setup.py build | |
安装源码 python setup.py install |
1 下载源码
2 解压源码
3 进入目录
4 编译源码 python setup.py build
5 安装源码 python setup.py install
注:在使用源码安装时,需要使用到gcc编译和Python开发环境,所以,要事先将环境安装上
1 yum install gcc
2 yum install python-devel
3 或
4 apt-get python-dev
安装成功后,模块会自动安装到sys.path中的某个目录中,如:
1 /usr/lib/python3.5/site-packages/
导入模块的方式同自定义模块导入的方式一样
3、内置模块
在安装完成python后,python本身就带有库,这个库叫做python内置库,那么内置模块也被称之为标准库
1)time模块
在python中,通常有以下几种方式来表示时间:
时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,
格式化的时间字符串:
元组(struct_time):struct_time元组共有9个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
import time
print(time.time()) # 返回当前时间的时间戳 1537413568.4175603
print(time.localtime()) # 将一个时间戳转换为当前时区
print(time.gmtime()) # localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
#结果
1537413652.9021907
time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=11, tm_min=20, tm_sec=52, tm_wday=3, tm_yday=263, tm_isdst=0)
time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=3, tm_min=20, tm_sec=52, tm_wday=3, tm_yday=263, tm_isdst=0)
print(time.ctime()) # Thu Sep 20 11:21:55 2018
print(time.gmtime(time.time()-9000))#返回utc时间的struc时间对象格式
#日期转换成时间戳
time_struct = time.strptime("2016-12-12 18:24:30","%Y-%m-%d %X")
print(time_struct)
#将日期字符串转换struct时间对象格式
#将struct时间对象转换成时间戳
time_struct = time.strptime("2016-12-12 18:24:30","%Y-%m-%d %X&#