更新时间:2021-07-09 来源:黑马程序员 浏览量:
Python内置了许多标准模块,例如sys、os、random和time模块等,下面为大家介绍几个常用的标准模块。
1.sys模块
sys模块中提供了一系列与Python解释器交互的函数和变量,用于操控Python的运行时环境。sys模块中常用变量与函数如表1所示。
表1 sys模块的常用变量与函数变量/函数 | 说明 |
---|---|
sys.argv | 获取命令行参数列表,该列表中的第一个元素是程序自身所在路径 |
sys.version | 获取Python解释器的版本信息 |
sys.path | 获取模块的搜索路径,该变量的初值为环境变量PYTHONPATH的值 |
sys.platform | 返回操作系统平台的名称 |
sys.exit() | 退出当前程序。可为该函数传递参数,以设置返回值或退出信息,正常退出返回值为0 |
(1)argv变量
通过import语句导入sys模块,然后访问argv变量获取命令行参数列表,具体代码如下:
import sys print(sys.argv)运行代码,结果如下所示。
['D:/Python项目/模块使用/常用模块.py']
(2)exit()函数
sys模块的exit()函数的作用是退出当前程序,执行完此函数后,后续的代码将不再执行。示例代码如下:
import sys sys.exit("程序退出") print(sys.argv)
运行代码,结果如下所示。
程序退出
2.os模块
os模块中提供了访问操作系统服务的功能,该模块中常用函数如表8-2所示。
表2 os模块的常用函数
函数 | 说明 |
---|---|
os.getcwd() | 获取当前工作路径,即当前Python脚本所在的路径 |
os.chdir() | 改变当前脚本的工作路径 |
os.remove() | 删除指定文件 |
os._exit() | 终止Python程序 |
os.path.abspath(path) | 返回path规范化的绝对路径 |
os.path.split(path) | 将path分隔为形如(目录,文件名)的二元组并返回 |
(1)getcwd()函数
通过os模块中的getcwd()函数获取当前的工作路径,示例代码如下。
import os print(os.getcwd()) # 获取当前的工作路径
运行代码,结果如下所示。
D:\Python项目\模块使用
(2)exit()函数
os模块中也有终止程序的函数——_exit(),该函数与sys模块中的exit()函数略有不同。执行os模块中的exit()函数后,程序会立即结束,之后的代码也不会再执行;而执行sys模块中的exit()函数会引发一个SystemExit异常,若没有捕获该异常退出程序,后面的代码不再执行;若捕获到该异常,则后续的代码仍然会执行。关于os和sys模块的exit()函数的用法比较如下。
使用os模块中的_exit()函数终止程序,示例代码如下:
import os print("执行_exit()之前") try: os._exit(0) print("执行_exit()之后") except: print("程序结束")
运行代码,结果如下所示。
执行_exit()之前
由以上结果可知,程序在执行完“os._exit(0)”代码后立即结束,不再执行后续的代码。
使用sys模块中的exit()函数终止程序,示例代码如下:
import sys print("执行_exit()之前") try: sys.exit(0) print("执行_exit()之后") except: print("程序结束")
运行代码,结果如下所示。
执行_exit()之前 程序结束
由以上结果可知,程序执行完“sys.exit(0)”代码后没有立即结束。由于try子句中捕获了SystemExit异常,因此try子句后续的代码不再执行,而是继续执行异常处理except子句。
(3)chdir ()函数
os模块中还提供了修改当前工作路径的chdir()函数,示例代码如下:
import os path = r"D:\Python项目\井字棋V1.0" # 查看当前工作目录 current_path = os.getcwd() print(f"修改前工作目录为{current_path}") # 修改当前工作目录 os.chdir(path) # 查看修改后的工作目录 current_path = os.getcwd() print(f"修改后工作目录为{current_path}")
上述代码首先使用getcwd()函数获取当前的工作路径,然后通过chdir()函数修改了当前的工作路径。
运行代码,结果如下所示。
修改前工作目录为D:\Python项目\模块使用 修改后工作目录为D:\Python项目\井字棋V1.0
3.random模块
random模块用于生成随机数,它提供了很多函数。接下来,针对常见的随机数函数进行讲解,具体如下。
(1)random.random()
返回0与1之间的随机浮点数N,范围为0 <= N < 1.0。
接下来,通过一个案例来演示random()的使用,具体代码如下所示:
import random # 生成第1个随机数 print("random():", random.random()) # 生成第2个随机数 print("random():", random.random())
运行代码,结果如图1所示。
图1 运行结果
(2)random.uniform(a,b)
返回a与b之间的随机浮点数N,范围为[a, b]。如果a的值小于b的值,则生成的随机浮点数N的取值范围为a <= N <= b;如果a的值大于b的值,则生成的随机浮点数N的取值范围为b <= N <= a。示例代码如下:
import random print("random:", random.uniform(50,100)) print("random:", random.uniform(100,50))
运行代码,结果如图2所示。
图2运行结果
(3)random.randint(a,b)
返回一个随机的整数N,N的取值范围为a <= N <= b。需要注意的是,a和b的取值必须为整数,并且a的值一定要小于b的值,示例代码如下:
import random # 生成的随机数为N,N的取值范围为12 <= N <= 20 print(random.randint(12, 20)) # 生成的随机数为N,N的结果永远是20 print(random.randint(20, 20)) # print(random.randint(20, 10)) # 该语句是错误的,下限(a)必须小于上限(b)。
运行代码,结果如图3所示。
图3 运行结果
(4)random.randrange([start], stop[, step])
返回指定递增基数集合中的一个随机数,基数默认值为1。其中,start参数用于指定范围内的开始值,其包含在范围内;end参数用于指定范围内的结束值,其不包含在范围内;step表示递增基数。
上述这些参数必须为整数。例如,random.randrange (10, 100, 2)相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。
(5)random.choice(sequence)
从sequence中返回一个随机的元素。其中,sequence参数可以是列表、元组或字符串。示例代码如下:
random.choice("学习Python") random.choice(["JGood","is", "a","handsome", "boy"]) random.choice(("Tuple","List", "Dict"))
需要注意的是,若sequence为空,则会引发IndexError异常。
(6)random.shuffle (x[,random])
用于将列表中的元素打乱顺序,俗称为洗牌。示例代码如下:
demo_list = ["Python", "is", "powerful", "simple", "and so on..."] random.shuffle(demo_list) print(demo_list) # ---- 结果(不同机器上的结果可能不一样。) # ['powerful', 'simple', 'is', 'Python', 'and so on...']
(7)random.sample(sequence,k)
从指定序列中随机获取k个元素作为一个片段返回,sample函数不会修改原有序列。示例代码如下:
list_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] slice = random.sample(list_num, 5) # 从list_num中随机获取5个元素,作为一个片断返回 print(slice) print(list_num) # 原有序列并没有改变。
4.time模块
time模块中提供了一系列处理时间的函数,常用函数的说明如表3所示。
表3 time模块的常用函数
函数 | 说明 |
---|---|
time.time() | 获取当前时间,结果为实数,单位为秒 |
time.sleep(secs) | 进入休眠态,时长由参数secs指定,单位为秒 |
time.strptime(string[,format]) | 将一个时间格式(如:2019-02-25)的字符串解析为时间元组 |
time.localtime([secs]) | 以struct_time类型输出本地时间 |
time.asctime([tuple]) | 获取时间字符串,或将时间元组转换为字符串 |
time.mktime(tuple) | 将时间元组转换为秒数 |
strftime(format[, tuple]) | 返回字符串表示的当地时间,格式由format决定 |
(1)time()函数
通过time()函数获取当前的时间,利用此特性计算程序的执行时间,示例代码如下。
import time before = time.time() # 计算1000的10000次方 result = pow(1000, 10000) after = time.time() interval = after - before print(f"运行时间为{interval}秒")
上述代码首先导入了time模块,使用time()函数获取了当前的时间,然后使用pow()函数计算1000的10000次方,在计算该结果时会产生一定的计算时间,计算结束后再次使用time()函数获取当前的时间,最后计算两个时间的差值,以得到程序执行的时间。
运行代码,结果如下所示。
运行时间为0.0009999275207519531秒
(2)sleep()函数
如果在开发过程中需要对某个功能或某段代码设置执行时间间隔,那么可以通过sleep()函数实现。sleep()函数会让程序进入休眠,并可自由设定休眠时间。
接下来,通过一个示例来演示sleep()函数的用法,具体代码如下。
import random, time name_li1 = ["李飞", "张羽", "赵韦", "王忠", "杜超"] name_li2 = [] for i in range(len(name_li1)): # 设置循环次数 people = random.choice(name_li1) # 随机选择一个元素 name_li1.remove(people) # 为避免出现重复元素,移除已选择元素 name_li2.append(people) # 添加到name_li2列表中 time.sleep(2) # 每隔2s执行一次 print(f"此时的成员有{name_li2}")
上述代码首先导入了random模块与time模块,然后定义了两个列表name_li1与name_li2, 遍历列表name_li1,调用choice()函数随机选择一个元素,并将随机获取的元素每隔2秒添加到列表name_li2中,直至全部添加。
运行代码,结果如下所示。
此时的成员有['张羽'] 此时的成员有['张羽', '赵韦'] 此时的成员有['张羽', '赵韦', '杜超'] 此时的成员有['张羽', '赵韦', '杜超', '王忠'] 此时的成员有['张羽', '赵韦', '杜超', '王忠', '李飞']
(3)strptime()函数与mktime()函数
如果在开发程序的过程中需要自定义时间戳,那么time模块的strptime()函数与mktime()函数是最好的选择,使用它们可以快速生成时间戳,具体代码如下。
import time str_dt = "2019-02-25 17:43:54" # 转换成时间数组 time_struct = time.strptime(str_dt, "%Y-%m-%d %H:%M:%S") # 转换成时间戳 timestamp = time.mktime(time_struct) print(timestamp)
运行代码,结果如下所示。
1551087834.0
(4)strftime()函数
strftime()函数来格式化日期,其定义格式如下:
time.strftime(format[, t])
接下来,通过一个案例来演示strftime()函数的使用,具体代码如下所示:
import time # 格式化成2016-03-20 11:45:39形式 print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 格式化成Sat Mar 28 22:24:24 2016形式 print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())) # 将格式字符串转换为时间戳 time_word = "Sat Mar 28 22:24:24 2016" print(time.mktime(time.strptime(time_word, "%a %b %d %H:%M:%S %Y")))
运行代码,结果如图4所示。
图4 运行结果
5.calendar模块
calendar模块有很广泛的方法用来处理年历和月历,如打印某月的月历,具体代码如下所示:
import calendar calendar_january = calendar.month(2016, 1) print("以下输出2016年3月份的日历:") print(calendar_january)
运行代码,结果如图5所示。
图5运行结果
除此之外,calendar模块还提供了很多内置函数,具体如表4所示。
表4 calendar模块的常见函数
序号 | 函数和说明 |
---|---|
1 | calendar.calendar(year,w=2,l=1,c=6) 返回一个多行字符串格式的year年年历,三个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* w+18+2* c。l是每星期行数 |
2 | calendar.firstweekday( ) 返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,即星期一 |
3 | calendar.isleap(year) 是闰年返回True,否则为False |
4 | calendar.leapdays(y1,y2) 返回在y1,y2两年之间的闰年总数 |
5 | calendar.month(year,month,w=2,l=1) 返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数 |
6 | calendar.monthcalendar(year,month) 返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始 |
7 | calendar.monthrange(year,month) 返回两个整数。第1个是该月的星期几的日期码,第2个是该月的日期码。日从0(星期一)~6(星期日),月份为1(1月)~12(12月) |
8 | calendar.prcal(year,w=2,l=1,c=6) 相当于 print(calendar.calendar(year,w,l,c)) |
9 | calendar.prmonth(year,month,w=2,l=1) 相当于 print(calendar.calendar(year, w, l, c)) |
10 | calendar.setfirstweekday(weekday) 设置每周的起始日期码。0(星期一)~6(星期日) |
11 | calendar.timegm(tupletime) 和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间辍(1970纪元后经过的浮点秒数) |
12 | calendar.weekday(year,month,day) 返回给定日期的日期码。0(星期一)~6(星期日)。月份为1(1月)~12(12月) |