第13章 模块的设计与应用
13.1 将自建的函数存储在模块中
一个大型程序通常是由许多的函数或类组成的,为了让程序的功能明确以及增强程序的可读性,我们可以将建立的函数或类存储成模块形式的独立文档,方便引用。
13.1.1 准备工作
假设有一个程序内容是制作冰淇淋与饮料的输出,如下所示。
def make_icecream(*toppings):
# 列出制作冰淇淋的配料
print("冰淇淋制作所需配料如下:")
for topping in toppings:
print("--- ", topping)
def make_drink(size, drink, num):
# 输入饮料规格(如小杯、中杯、大杯)与类型(如可乐、雪碧)
print("需配送饮料:")
print("%s %s x %d" % (drink, size, num))
make_icecream('蓝莓酱')
make_icecream('草莓酱', '巧克力')
make_drink('大杯', '可乐', 2)
执行结果:
冰淇淋制作所需配料如下:
--- 蓝莓酱
冰淇淋制作所需配料如下:
--- 草莓酱
--- 巧克力
需配送饮料:
可乐 大杯 x 2
13.1.2 创建函数内容的模块
假设需要在其它程序中调用make_icecream()和make_drink(),此时可以将这两个函数创建成模块。模块的扩展名与Python程序文档一样,为.py。
将make_icecream()和make_drink()创建成一个模块,保存为makefood.py。
# makefood.py
def make_icecream(*toppings):
# 列出制作冰淇淋的配料
print("冰淇淋制作所需配料如下:")
for topping in toppings:
print("--- ", topping)
def make_drink(size, drink, num):
# 输入饮料规格(如小杯、中杯、大杯)与类型(如可乐、雪碧)
print("需配送饮料:")
print("%s %s x %d" % (drink, size, num))
13.2 应用函数模块
应用函数模块主要有以下几种方式:
- 导入模块 ==> import 语句
- 导入模块内的函数 ==> from … import 语句
- 导入模块内的所有函数 ==> from … import * 语句
13.2.1 import 语句
要导入创建的模块,只需在程序内执行import语句,语法如下:
import module # module为模块名称
程序中引用模块的函数语法为:模块名称.函数名。
程序实例:导入模块makefood.py。
import makefood # 导入模块mdkefood.py
# 引用makefood.py中的方法
makefood.make_icecream('蓝莓酱')
makefood.make_icecream('草莓酱', '巧克力')
makefood.make_drink('大杯', '可乐', 2)
执行结果:
冰淇淋制作所需配料如下:
--- 蓝莓酱
冰淇淋制作所需配料如下:
--- 草莓酱
--- 巧克力
需配送饮料:
可乐 大杯 x 2
13.2.2 from … import 语句
如果只是想要导入模块中的部分指定的函数,则可以使用from语句,语法如下:
from 模块名称 import 函数名称 # 导入多个函数时,函数名之间用“,”隔开
程序实例:
from makefood import make_icecream, make_drink # 导入模块makefood.py中的函数make_icecream()和make_drink()
# 引用已导入的函数,可省略模块名称
make_icecream('草莓酱')
make_icecream('草莓酱', '巧克力')
make_drink('中杯', '雪碧', 1)
执行结果:
冰淇淋制作所需配料如下:
--- 草莓酱
冰淇淋制作所需配料如下:
--- 草莓酱
--- 巧克力
需配送饮料:
雪碧 中杯 x 1
13.2.3 from … import * 语句
如果想要导入模块内的所有函数,可使用如下声明:
from 模块名称 import *
程序实例:
from makefood import * # 导入模块makefood.py中的所有函数
# 引用已导入的函数,可省略模块名称
make_icecream('草莓酱')
make_icecream('草莓酱', '巧克力')
make_drink('中杯', '啤酒', 1)
执行结果:
冰淇淋制作所需配料如下:
--- 草莓酱
冰淇淋制作所需配料如下:
--- 草莓酱
--- 巧克力
需配送饮料:
啤酒 中杯 x 1
13.3 随机数random模块
所谓的随机数是指平均散布在某区间的数字。
13.3.1 randint()
randint() 方法可以随机产生指定区间内的整数,它的语法如下:
randint(min, max) # 产生min与max之间的整数值
程序实例:
import random # 导入模块random
min, max = 1, 10
answer = random.randint(min, max) # 随机产生min与max之间的整数
while True:
num = int(input("猜一个1 ~ 10之间的整数:"))
if num == answer:
print("恭喜答对啦~~")
break
elif num < answer:
print("再大一点")
else:
print("再小一点")
执行结果:
13.3.2 choice()
choice() 方法可以在一个列表中随机返回一个元素。
程序实例:
import random # 导入模块random
prizes = ['一等奖', '二等奖', '三等奖', '特等奖', '安慰奖']
print("本次开奖结果:",random.choice(prizes))
执行结果:
13.3.3 shuffle()
shuffle() 方法可以将列表元素重新排列。
程序实例:
import random # 导入模块random
cards = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
for i in range(5):
random.shuffle(cards) # 将顺序打乱重新排列
print(cards)
执行结果:
13.3.4 sample()
sample() 的语法如下:
sample(name_list, num) # 随机返回列表name_list中的num个元素
程序实例:
import random # 导入模块random
lotterys = random.sample(range(1,50), 7) # 7组号码
specialNum = lotterys.pop() # 特别号
print("本期大乐透号码:", end="")
for lottery in sorted(lotterys):
print(lottery, end=" ")
print("\n特别号:%d" % specialNum)
执行结果:
本期大乐透号码:11 14 41 43 46 47
特别号:2
13.4 时间time模块
13.4.1 time()
time() 方法可以返回自1970年1月1日0时0分0秒以来的秒数(时间戳)。
程序实例:
import random # 导入模块random
import time # 导入模块time
min, max = 1, 10
answer = random.randint(min, max) # 随机产生min与max之间的整数
startTime = int(time.time()) # 起始秒数,时间戳
while True:
num = int(input("猜一个1 ~ 10之间的整数:"))
if num == answer:
print("恭喜答对啦~~")
endTime = int(time.time()) # 结束秒数
print("共耗时:", endTime - startTime, "秒")
break
elif num < answer:
print("再大一点")
else:
print("再小一点")
执行结果:
13.4.2 sleep()
sleep() 方法可以让工作暂停,参数单位为秒。
程序实例:
import time # 导入模块time
fruits = ['apple', 'banana', 'orange', 'peach', 'pear']
for fruit in fruits:
print(fruit, "当前时间戳:", int(time.time()))
time.sleep(1) # 暂停1s
执行结果:
apple 当前时间戳: 1612153005
banana 当前时间戳: 1612153006
orange 当前时间戳: 1612153007
peach 当前时间戳: 1612153008
pear 当前时间戳: 1612153009
13.4.3 asctime()
asctime() 方法会以可阅读方式列出当前系统时间。
程序实例:
import time # 导入模块time
print(time.asctime()) # 列出当前系统时间
执行结果:
Mon Feb 1 12:19:18 2021
13.4.4 localtime()
localtime() 方法可以返回当前时间的结构数据,所返回的结构可以用索引方式获得个别内容。
程序实例:
import time # 导入模块time
localTime = time.localtime()
print(localTime) # 列出当前系统时间
print(type(localTime))
print("年份:", localTime[0])
print("月份:", localTime[1])
print("天数:", localTime[2]) # 这个月的第几天
print("时:", localTime[3])
print("分:", localTime[4])
print("秒:", localTime[5])
print("星期几:", localTime[6]) # 0代表星期一,以此类推
print("第几天:", localTime[7]) # 该年份的第几天
print("夏令时间:", localTime[8]) # 1代表是夏令时间,0代表不是
执行结果:
13.5 日期calendar模块
13.5.1 isleap()
isleap() 方法可以判断所给出的年份是否为闰年,是则返回True,否则返回False。
程序实例:
import calendar
print("2020年是否为闰年:", calendar.isleap(2020))
print("2021年是否为闰年:", calendar.isleap(2021))
执行结果:
2020年是否为闰年: True
2021年是否为闰年: False
13.5.2 month()
month() 方法完整的参数为:month(year,month),可以列出指定年份月份的月历。
程序实例:
import calendar
print(calendar.month(2021, 1)) # 列出2021年1月份的月历
执行结果:
13.5.3 calendar()
calendar() 方法完整的参数为:calendar(year),可以列出指定年份的年历。
程序实例:
import calendar
print(calendar.calendar(2021)) # 列出2021年的年历
执行结果:
参考文章链接:
https://www.runoob.com/python3/python3-module.html
往期文章:
- 《Python零基础快乐学习之旅》学习笔记2——认识变量与基本数学运算
- 《Python零基础快乐学习之旅》学习笔记3——Python的基本数据类型
- 《Python零基础快乐学习之旅》学习笔记4——基本输入与输出
- 《Python零基础快乐学习之旅》学习笔记5——程序的流程控制使用if语句
- 《Python零基础快乐学习之旅》学习笔记6——列表(list)
- 《Python零基础快乐学习之旅》学习笔记7——循环设计
- 《Python零基础快乐学习之旅》学习笔记8——元组(tuple)
- 《Python零基础快乐学习之旅》学习笔记9——字典(dict)
- 《Python零基础快乐学习之旅》学习笔记10——集合(set)
- 《Python零基础快乐学习之旅》学习笔记11——函数设计
- 《Python零基础快乐学习之旅》学习笔记12——类-面向对象