1. 模块
1) 什么是模块
为了使代码方便维护,可以将代码进行分类放到不同的文件里。所有的代码按照一定的规则分布在各个 .py文件里,需要使用时只要导入相应的文件即可。在Python中,这样的文件称为模块。
模块的作用:
- 更好地组织代码结构;
- 提高代码复用率。
2) 导入模块
当需要使用模块的时候,用import语句导入对应的模块即可。如:在main.py中使用other.py模块,用“import 模块名”导入模块,相当于在main.py里借用并运行了other.py文件里的代码。一般模块中的代码大多是定义好的变量和函数等。
# other.py
pi = 3.14159265359
def half(x):
return x/2
# main.py
import other # 导入other模块
print(other.pi)
# 输出:3.14159265359
print(other.half(4))
# 输出:2.0
导入模块后,要使用模块中的变量、函数,需要通过“模块名.变量名”和“模块名.函数名()”的方式。
此外,import语句还有一种用法是import...as...,如import other as o,之后就可以使用o来代替other,如print(o.pi)。数据分析常用的pandas和numpy常被简写为pd和np。
若同时导入多个模块,可以用逗号隔开,如import a, b, c 可以同时导入 a.py、b.py、c.py 三个文件。
3) 导入部分模块
可以使用from...import...语句只导入需要的变量、函数等。
格式:from 模块名 import 变量名/函数名
导入后的变量/函数可以直接使用,无需再加上“模块名.”前缀,若仍以加前缀的方式访问,代码将会报错NameError: name 'xxx' is not defined on line x.
# other.py
pi = 3.14159265359
def half(x):
return x/2
# main.py
from other import pi, half # 从other模块导入pi和half
print(pi)
# 输出:3.14159265359
print(half(4))
# 输出:2.0
4) 程序入口
当做复杂项目时,会将代码拆分到各个模块中,因此,需要一个程序入口将整个项目的代码串联运行起来。为了指明某个文件是程序入口,可以在代码中这样写:
# xxx.py
代码块A
if __name__ == '__main__':
代码块B
__name__是Python中一个特殊的内置变量,它的值默认是模块名,当文件被直接运行时,即通过命令行执行python xxx.py运行代码时,__name__的值会被改为__main__。因此,可以根据__name__这个特性来判断模块是以导入的方式使用,还是作为程序入口文件直接运行,从而执行相应的操作。
def bootstrap():
print('项目启动')
if __name__ == '__main__':
bootstrap()
上面代码只有在作为程序入口直接运行时才会自动执行bootstrap()启动项目,同时也提供了bootstrap()函数给其他模块使用:
# main.py
def bootstrap():
print('项目启动')
if __name__ == '__main__':
bootstrap()
# other.py
import main
main.bootstrap()
Exercise:
# other.py
print('我是other模块')
if __name__ == '__main__':
print('我被直接运行了(other)')
# main.py
import other
print('我是main模块')
if __name__ == '__main__':
print('我被直接运行了(main)')
# 输出:
# 我是other模块
# 我是main模块
# 我被直接运行了(main)
2. 内置模块
1) 内置模块——时间
①time模块
import time
# 暂停程序的执行,参数为秒
time.sleep(3) # 暂停3秒再执行后续代码
# 获取当前时间的Unix时间戳
print(time.time())
# 输出:1586502040.88338
# 获取当前时间
print(time.ctime())
# 输出:Fri Apr 10 15:03:30 2020
②datetime模块
datetime模块包括很多函数和类,用于日期和时间的解析、格式化和计算。
# 导入datetime模块中的datetime对象
from datetime import datetime
# 获取当前时间
print(datetime.now())
# 输出:2020-04-10 15:09:07.993780
# 将Unix时间戳转换成时间
print(datetime.fromtimestamp(1586502547.993780))
# 输出:2020-04-10 15:09:07.993780
此外,利用timedelta()可以实现日期和时间的计算。
from datetime import datetime, timedelta
print(datetime.now() – timedelta(days = 5))
# 输出:2020-04-05 15:15:24.568680
调用timedelta()时传入的是关键字参数,除了days之外,timedelta()还支持传入weeks, hours, minutes, seconds, milliseconds, microseconds。
timedelta()也支持同时传入多个参数,比如计算两个半小时后的时间:
from datetime import datetime, timedelta
print(datetime.now() + timedelta(hours = 2, minutes = 30))
# 输出:2020-04-10 17:51:55.606280
2) 内置模块——数字
①random模块
# 导入random模块
import random
# 随机生成0-1之间的浮点数,包括0,不包括1
print(random.random())
# 输出:0.878022926133
# 随机生成0-5之间的整数,包括0和5
print(random.randint(0, 5))
# 输出:3
# 随机生成0-5之间的浮点数,包括0和5
print(random.uniform(0, 5))
# 输出:4.86369987147
# 从非空序列中随即返回一个元素
print(random.choice([1, 2, 3]))
# 输出:2
②math模块
# 导入math模块
import math
# 向上取整
print(math.ceil(2.3))
# 输出:3
# 向下取整
print(math.floor(2.9))
# 输出:2
# 取平方根
print(math.sqrt(4))
# 输出:2.0
# 数学常数Π
print(math.pi)
# 输出:3.14159265359
# 数学常数e
print(math.e)
# 输出:2.71828182846
















