1. 模块
python中一个py文件就是一个模块
1.1 使用要求
前提:被使用的模块的模块名必须符合变量名的的要求(是标识符不是关键字)
能被使用的内容:所有的全局变量
怎么用:使用别的模块中的内容前,必须先导入模块
1.2 导入模块
1.2.1 import模块名
导入指定模块;导入后可以通过’模块名.xxx’的方式使用这个模块中所有的全局变量
RIGHT Example:
import test
print(test.a)
1.2.2 from 模块名 import 变量1, 变量2, …
导入指定模块;导入后可以直接使用指定的变量
RIGHT Example:
from test import a
print(a)
WRONG Example:
from test import a
print(b) # 报错,NameError: name 'b' is not defined
print(test.b) # 报错,NameError: name 'b' is not defined
1.2.3 from 模块名 import *
导入指定模块中所有的变量;导入后可以直接使用所有变量
RIGHT Example:
from test import *
print(a)
print(b)
1.2.4 import 模块名 as 新模块名
直接导入指定模块并且对模块进行重命名,重命名后需要通过新模块名来代替原模块名使用模块
RIGHT Example:
import test as ts
print(ts.a)
print(ts.b)
APPLICATION 模块名和变量名冲突:
# 错误示范,会报错
import time
time = '2000-9-1'
print(time.time())
# 正确示范
import time as T
time = '2000-9-1'
print(T.time())
1.2.5 导入时给变量名重命名
from 模块名 import 变量名1 as 新变量名1, 变量名2, 变量名3 as 新变量名3, …
RIGHT Example:
from test import a as ta, b as tb
a = 'hello'
print(ta)
print(tb)
1.3 导入原理
不管以什么样的方式导入模块,导入模块的时候系统会自动进入模块执行这个模块中所有的代码
1.4 阻止导入
因为导入模块的时候默认会执行模块中所有的代码,就会导致有些完全没有必要在导入的时候执行的代码被执行
阻止导入:如果希望导入模块的时候某些代码可以不执行,就需要去阻止代码在被导入的时候执行
阻止方法:将不希望执行的代码放到main对应if条件语句里面
if __name__ == '__main__':
2. 包
包就是存放__init__.py文件的文件夹
2.1 import 包名
直接导入包,导入后可以通过’包.xxx’的方式使用__ init__.py中所有的全局变量
RIGHT Example:
import package1
print(package1.y)
2.2 import 包名.模块名
导入指定包中的指定模块,导入后可以通过’包名.模块名.xxx’来使用指定模块中所有的全局变量
RIGHT Example:
import package1.test2
print(package1.test2.x)
package1.test2.func2()
# 改良:
import package1.test2 as test2
print(test2.x)
test2.func2()
2.3 from 包名 import 模块名1, 模块名2, …
导入包中的指定模块,导入后通过模块名.xxx使用对应的模块中的全局变量
RIGHT Example:
from package1 import test2, test3
print(test2.x)
test2.func2()
print(test3.z)
test3.func4()
2.4 from 包名 import *
导入包中的 __ init __.py文件中所有的全局变量
RIGHT Example:
from package1 import *
print(y)
func3()
2.5 from 包名.模块名 import 变量1, 变量2, …
导入指定模块中的指定变量
RIGHT Example:
from package1.test3 import z, func4
print(z)
func4()
3. 常用模块
3.1 数学模块
3.1.1 浮点数转整数
(1)int(浮点数):直接保留整数部分
RIGHT Example:
print(int(1.23)) # 1
print(int(-1.23)) # -1
(2)math.ceil(浮点数):向大取整
RIGHT Example:
print(math.ceil(1.98)) # 2
print(math.ceil(1.002)) # 2
print(math.ceil(-1.23)) # -1
(3)math.floor(浮点数):向小取整
RIGHT Example:
print(math.floor(1.98)) # 1
print(math.floor(1.002)) # 1
print(math.floor(-1.08)) # -2
(4)round(浮点数):四舍六入五成双
RIGHT Example:
print(round(1.68)) # 2
print(round(1.402)) # 1
print(round(1.5)) # 2
print(round(2.5)) # 2
3.1.2 绝对值
(1)abs(数字)
RIGHT Example:
print(abs(-23)) # 23
print(abs(-23.45)) # 23.45
(2)math.fabs(数字)
RIGHT Example:
print(math.fabs(-23)) # 23.0
print(math.fabs(-23.45)) # 23.45
3.2 random模块
3.2.1 创建随机整数
randint(a, b):产生[a, b]的随机整数
RIGHT Example:
print(random.randint(1, 100))
3.2.2 创建随机小数
random():产生[0, 1)的随机小数
RIGHT Example:
print(random.random())
APPLICATION 1 产生0~100的随机小数:
print(f'{random.random() * 100:.2f}')
APPLICATION 2 产生30~100的随机小数:
print(random.random() * 70 + 30)
APPLICATION 3 产生25~55的随机小数:
print(random.random() * 30 + 25)
3.2.3 在指定的等差数列中随机获取一个数
randrange(N), randrange(M, N), randrange(M, N, step)
RIGHT Example:
print(random.randrange(0, 100, 2))
print(random.randrange(10, 61, 10))
3.2.4 洗牌
shuffle(列表):将列表中元素的顺序随机打乱
RIGHT Example:
nums = [10, 20, 30, 40, 50]
random.shuffle(nums)
print(nums)
3.2.5 抽牌
(1)choice(序列):从指定序列中随机获取一个元素
RIGHT Example:
print(random.choice('abc123'))
print(random.choice(nums))
(2)choices(序列):从指定序列中随机获得一个元素,返回值是列表
RIGHT Example:
print(random.choices('abc123'))
(3)choices(序列, k=个数):从指定序列中随机获得指定个数个元素,返回值是列表(有放回抽取)
RIGHT Example:
print(random.choices('abc123', k=2))
(4)choices(序列, weights=权重列表, k=次数):从指定序列中随机获得指定个数个元素,返回值是列表
RIGHT Example:
list1 = ['谢谢!', '5元红包', '100元红包', 'iphone13', 'macpro', '100万元现金']
print(random.choices(list1, weights=[100000, 1000, 5, 3, 2, 1]))
(5)sample():无放回抽样
random.sample(序列, k=次数) # 3.9以前的版本
random.sample(序列, k=次数, counts=权重列表) # 3.9以后的版本
RIGHT Example:
print(random.sample([10, 20], k=2))
print(random.sample(list1, k=1, counts=[50000, 50000, 100, 10, 1]))
3.3 time模块
3.3.1 time()
获取当前时间,返回的是时间戳
补充:
时间戳:通过保存一个时间到1970年1月1日0时0分0秒(格林威治时间)之间的时间差(单位:秒)来保存一个时间值
使用时间戳保存时间的好处:a.节约内存 b.方便加密
RIGHT Example:
t1 = time.time()
print(t1) # 1651052151.1938202
3.3.2 localtime()
(1)localtime():获取本地当前时间,返回的是结构体时间
RIGHT Example:
t2 = time.localtime()
print(t2)
# time.struct_time(tm_year=2022, tm_mon=4, tm_mday=27, tm_hour=17, tm_min=56, tm_sec=42, tm_wday=2, tm_yday=117, tm_isdst=0)
(2)localtime(时间戳):将时间戳转换成结构体时间
RIGHT Example:
t3 = time.localtime(0)
print(t3)
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
注意:tm_wday:表示星期几,0(周一)~6(周天)