【模块】
本节目录
-
模块相关介绍
-
time
-
random
-
os
-
sys
-
json & pickle
-
shelve
-
xml
-
configparser
-
hashlib
-
subprocess
-
optparse
-
struct
-
所述一些模块方法并不完善,只是简单性的学习,或有错误,敬请指正
-
未完待续......
为什么要有模块:
在计算机程序的开发过程中,程序代码越写越多,在一个py文件中会越来越多,变得不容易维护
为了编写易维护的代码,将很多函数分组,分别放入不同的py文件中,每个文件包含的代码就会相对减少,诸多编程语言都这样做
在python中,一个.py文件中就可以称之为一个模块(moudle)
使用模块有什么好处:大大提高了代码的可维护性,也可区分逻辑
其次,在编写好一个模块,就可以在其它地方进行引用,不必从0开始
模块有三种:
- python标准库
- 第三方模块
- 应用程序自定义模块
模块的引用方式:
1、import语句 1)执行对应文件 2)引入变量名
|
1
|
import time # 导入时间模块 也可以同时导入多个模块,用逗号隔开
|
2、from....import 模块名
|
1
|
from my_moudle import main
|
3、from....import *
引入一切,即导入模块中所有的项目,不推荐使用。因为引入的其它来源的命名,很可能覆盖了已有的定义。
4、运行本质
|
1
2
|
#1 import test#2 from test import add |
那么,python中是如何找到这些模块呢?
sys.path,存放的是执行文件的搜索路径(环境变量)。然而模块就是通过环境变量去找的.
一个目录中带__iter__.py的文件成为包(package)
1、用来组织模块 2、避免相同模块名的冲突
注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录(文件夹),而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是对应包的名字。
这里介绍一下__name__的属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。
|
1
2
3
4
5
6
7
8
9
10
|
if __name__ == '__main__':
print('程序自身在运行')
else:
print('我来自另一模块')
python using_name.py程序自身在运行import using_name
我来自另一模块 |
说明: 每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。
time
时间相关的操作,时间有三种表示方式:
时间戳 1970年1月1日之后的秒,即:time.time(),只有时间戳参数才能进行加减
格式化的字符串 2014-11-11 11:11, 即:time.strftime('%Y-%m-%d')
结构化时间 元组包含了:年、日、星期等... time.struct_time 即:time.localtime()
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
print time.time()
print time.mktime(time.localtime())
print time.gmtime() #可加时间戳参数
print time.localtime() #可加时间戳参数
print time.strptime('2014-11-11', '%Y-%m-%d')
print time.strftime('%Y-%m-%d') #默认当前时间
print time.strftime('%Y-%m-%d',time.localtime()) #默认当前时间
print time.asctime()
print time.asctime(time.localtime())
print time.ctime(time.time())
import datetime
'''datetime.date:表示日期的类。常用的属性有year, month, daydatetime.time:表示时间的类。常用的属性有hour, minute, second, microseconddatetime.datetime:表示日期时间datetime.timedelta:表示时间间隔,即两个时间点之间的长度timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])strftime("%Y-%m-%d")'''import datetime
print datetime.datetime.now()
print datetime.datetime.now() - datetime.timedelta(days=5)
|
random(随机模块)
|
1
2
3
4
5
6
7
8
9
10
|
import random
print(random.random()) # 0到1的随机浮点数
print(random.randint(1,3)) # 整形 闭区间 [1,3]
print(random.randrange(1,3)) # 整形,开区间 [1,3)
li = [11,22,33,44,55]
print(random.choice(li)) # 基于可迭代对象随机
print(random.sample(li,2)) # 随机选定多个
print(random.uniform(1,2)) # 任意范围的浮点型
random.shuffle(li) # 随机打乱次序
print(li)
|
通过随机模块可以制作一个随机验证码
def v_code(): checkcode = "" # 定义一个空字符串 for i in range(4): # 遍历四次 num = random.randint(0,9) # 随机选择0到9的整形 alf = chr(random.randint(65,90)) # 随机选择chr对应的字母 add = random.choice([num,alf]) # 基于上面的可迭代对象选择一个 checkcode += str(add) # 将它们变为字符串,加到空字符串里面 return checkcode if __name__ == "__main__": print(v_code())