一、模块应用
模块是一个包含所有定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数、变量等功能来完成数据处理。
1.模块导入
import a 导入名称为 a 的模块,调用时使用 a.x (x为函数、变量名)进行调用, 例如:导入import random,调用random.randint()。
from a import b 导入名称为 a 的模块中名称为 b 的函数或变量,调用时使用 b 直接调用,例如: 导入from random import randint ,调用randint()。
from a import* 导入名称为 a 的模块所有方法,调用时直接使用函数或变量名进行调用,例如: 导入from random import*,调用randint()。
2.模块别名
import aaa as a 在使用过程中如名称太长,可用 as 修改模块名字,修改后用a.x进行调用,例如: import random as rd,调用rd.randint()。
3.__name__
每个模块都有一个__name__属性,其值是'__main__'时,表明该模块自身在运行,否则是被引入。如不想让模块中的某些代码执行,可以用__name__属性来使程序仅调用模块中的一部分。
# YKH.py print('我是 YKH 模块__name__值:'+__name__) if __name__ == '__main__': print('YKH 模块被直接运行了') # 我是 YKH 模块__name__值:__main__ # YKH 模块被直接运行
注意:
__name__ == '__main__'在自身模块调用时,值为'__main__',
且执行 if __name__ == '__main__' 下所有内容。
# x.py print('我是 x 模块__name__值:'+__name__) if __name__ == '__main__': print('x 模块被直接运行了') # y.py import x print('我是 y 模块__name__值:'+__name__) if __name__ == '__main__': print('y 模块被直接运行了') # 我是 x 模块__name__值 x # 我是 y 模块__name__值__main__ # y 模块被直接运行
注意:
__name__ == '__main__'在自身模块调用时,值为'__main__',且执行if __name__ ==
'__main__' 下所有内容,调用其他模块时 __name__ 值为调入模块名,所以 __name__ 值不
为'__main__',故不会执行调入模块下if __name__ == '__main__' 下所有内容。
4.dir()函数
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回。
import random print(dir(random)) ['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_inst', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
5.常用模块
1)random
函数 |
描述(import random) |
random() |
在[0,1)范围内随机生成一个浮点数。 如random.random() |
uniform(x,y) |
[x,y]范围内随机生成一个浮点数。 如random.uniform(3,5)。 |
randint(x,y) |
在指定范围内随机一个整数。 如random.randint(1,10)。 |
randrange([start,] stop [,step]) |
指定范围内按指定基数递增集合中获取一个随机数,默认值为 1。 start -- 指定范围内的开始值,包含在范围内。 stop -- 指定范围内的结束值,不包含在范围内。 step -- 指定递增基数。 如random.randrange(1, 100, 2)从 1-100 中选取一个奇数。 |
choice(x) |
从序列x中随机挑选一个元素,x --可以是一个列表、元组、字符串。 如random.choice(range(10)),从0到9中随机挑选一个整数。 |
sample(x,y) |
从序列中随机指定个数的元素。 如x = [1,2,3,4,5],random.sample(x,3)。 |
seed([x]) |
改变随机数生成器种子,需在调用其他随机函数之前调用此函数。 如random.seed(8),提前指定种子数字为8。 |
shuffle(x) |
将序列x的所有元素随机排序。 如random.shuffle(x)。 |
2)time、datetime
函数 |
描述(import time) |
time() |
返回当前时间的时间戳(1970纪元后经过的浮点秒数)。 time.time(),返回 1668499929.629205 。 |
sleep(x) |
推迟调用线程的运行,可通过参数x指秒数,表示进程挂起的时间。 time.sleep(3),延迟3秒后继续执行。 |
asctime(x) |
返回一个可读的形式为"Tue(星期) Nov(月份) 15 06:56:32 2022" (2022年11月15日 周二06时56分32秒)的24个字符的字符串 。time.asctime(),返回 Tue Nov 15 06:56:32 2022。 time.asctime(time.gmtime()),返回 Tue Nov 15 06:56:32 2022。 time.asctime(time.localtime()),返回 Tue Nov 15 06:56:32 2022。 |
ctime(x) |
把时间戳(按秒计算的浮点数)转化为time.asctime()的形式。 如参数为None的时候,将会默认time.time()为参数。 time.ctime(),返回 Tue Nov 15 06:56:32 2022。 |
|
gmtime(x) |
将一个时间戳转换为UTC时区(0时区)的struct_time, 如参数为None,默认time.time()为参数 。 ti |
|
localtime(x) |
类似gmtime(),作用是格式化时间戳为本地的时间。 如参数为None,默认time.time()为参数。 time.localtime(),返回 time.struct_time(tm_year=2022, tm_mon=11, tm_mday=15, tm_hour=7, tm_min=14, tm_sec=54, tm_wday=1, tm_yday=319, tm_isdst=0) |
|
mktime(x) |
与gmtime(), localtime()相反的操作,它接收struct_time对象作为参数, 返回用秒数来表示时间的浮点数。 x = (2022,11,15,6,56,32,1,319,0) |
|
strftime(x) |
格式化时间,返回可读字符串表示的当地时间,格式由参数 x 决定。 time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()) 返回 2022-11-15 07:57:58 。 |
strptime(x) |
根据指定的格式把一个时间字符串解析为时间元组。time.strptime("15 Nov 22 32 56 06", "%d %b %y %S %M %H") 返回 time.struct_time(tm_year=2022, tm_mon=11, tm_mday=15, tm_hour=6, tm_min=56, tm_sec=32, tm_wday=1, tm_yday=319, tm_isdst=-1) 。 |
3)math
函数 |
描述(import datetime) |
now() |
获取当前日期和时间 。 datetime.datetime.now(),返回 2022-11-16 06:06:16.112800 。 |
today() |
获取当前日期和时间 。 datetime.date.today(),返回 2022-11-16 。 datetime.datetime.today(),返回 2022-11-16 08:27:33.373906 。 |
year |
获取日期年 。 datetime.date.today().year ,返回 2022 。 datetime.datetime.today().year ,返回 2022 。 |
month |
获取日期月 。 datetime.date.today().month,返回11 。 datetime.datetime.today().month,返回 11 。 |
day |
获取日期日。 datetime.date.today().day,返回 16 。 datetime.datetime.today().day,返回16 。 |
hour |
获取时间小时。 datetime.datetime.today().hour,返回 12 。 |
minute |
获取时间分钟。 datetime.datetime.today().minute,返回 13 。 |
second |
获取时间秒数。 datetime.datetime.today().second,返回 15 。 |
isocalendar() |
返回一个包含三个值的元组,三个值依次为: 年份,周数,星期数(周一为1…周日为7) 。 datetime.date.today().isocalendar() ,返回 (2022, 46, 3)。 |
weekday() |
返回指定日期所在的星期数(周一为 0, 周日为 6 ) datetime.datetime.today().weekday(),返回 2 。 |
isoweekday() |
返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7) 。 datetime.datetime.today(). isoweekday(),返回 3 。 |
toordinal() |
返回公元公历开始到现在的天数。公元1年1月1日为1 。 datetime.date.today().toordinal(),返回 738475。 |
timetuple() |
将时间日期格式化,返回一个类型为time.struct_time的数组 。datetime.datetime.today().timetuple() , 返回 time.struct_time(tm_year=2022, tm_mon=11, tm_mday=16, tm_hour=8, tm_min=39, tm_sec=28, tm_wday=2, tm_yday=320, tm_isdst=-1) |
strftime(x) |
格式化时间,返回可读字符串表示的当地时间,格式由参数 x 决定。 datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), 返回 2022-11-16 06:36:32 。 |
timedelta() |
在指定日期时间基础上增加指定时 间和时间。datetime.datetime.now() + datetime.timedelta(days = 5) 加5天 。 datetime.datetime.now() + datetime.timedelta(days = -5) 减5天 。 datetime.datetime.now() + datetime.timedelta(hours=5) 加5小时 。 datetime.datetime.now() + datetime.timedelta(minutes=5) 加5分钟 。 datetime.datetime.now() + datetime.timedelta(seconds=300) 加5秒钟 。 |
struct_time元组属性如下:
属性 |
描述 |
tm_year |
2022 年 |
tm_mon |
1 到 12 月 |
tm_mday |
1 到 31 日 |
tm_hour |
0 到 23 时 |
tm_min |
0 到 59 分 |
tm_sec |
0 到 61 (60或61 是闰秒) 秒 |
tm_wday |
0到6 (0是周一) 一周的第几日 |
tm_yday |
1 到 366(儒略历) 一年的第几日 |
tm_isdst |
-1, 0, 1 1 - 夏令时 0 - 非夏令时 -1 - 未确定夏令时 |
时间日期格式化符号属性如下:
符号 |
描述 |
%a |
本地简化星期名称 。 |
%A |
本地完整星期名称 。 |
%b |
本地简化的月份名称 。 |
%B |
本地完整的月份名称 。 |
%c |
本地相应的日期表示和时间表示 。 |
%C |
年份的前两位。 |
%d |
月内中的一天(0-31)。 |
%D |
当前日期(11/15/22) |
%e |
每月的第几天。 |
%F |
当前日期(2022-11-15) |
%g |
年份的后两位。 |
%G |
当前日期年份。 |
%h |
英文简写月份名。 |
%H |
24小时制小时数(0-23)。 |
%I |
12小时制小时数(01-12)。 |
%j |
年内的一天(001-366)。 |
%m |
月份(01-12)。 |
%M |
分钟数(00-59)。 |
%p |
本地A.M.或P.M.的等价符 。 |
%r |
12小时时间(12:26:15 AM) |
%R |
显示当前时:分(08:27)。 |
%S |
秒(00-59)。 |
%u |
星期(0-6),每周第几天 。 |
%U |
一年中的星期数(00-53) 。 |
%V |
每年的第几周,使用基于周的年。 |
%w |
星期(0-6),每周第几天 。 |
%W |
一年中的星期数(00-53)。 |
%x |
本地相应的日期表示 。 |
%X |
本地相应的时间表示 。 |
%y |
两位数的年份表示(00-99)。 |
%Y |
四位数的年份表示(000-9999)。 |
%z |
与utc时间的间隔 (如果不存在为空字符) |
%Z |
时区的名字(如果不存在为空字符) |
%% |
%号本身 。 |
3)math
函数 |
描述(import math) |
sqrt(x) |
计算平方根,返回的数据为浮点型数据 。 math.sqrt(9),3.0 。 |
log(x,y) |
计算对数,其中x为真数,y为底数 。 math.log(100,10),2.0 即 100是10^2 。 |
ceil(x) |
向上取整操作 。 math.ceil(1.23),2 。 |
floor(x) |
向下取整操作 。 math.floor(1.50),1 。 |
pow(x,y) |
计算 x 的 y 次方 。 math.pow(2,3),8.0 。 |
fabs(x) |
计算一个数值的绝对值 。 math.fabs(-123),123.0 。 |
pi |
圆周率 π 。 math.pi,3.141592653589793 。 |
e |
自然常数 e 。 math.e,2.718281828459045 。 |
trunc(x) |
返回x的整数部分 。 math.trunc(12.36),12 。 |
modf(x) |
返回x的小数和整数 。 math.modf(12.36),(0.35999......, 12.0) 。 |
fmod(x,y) |
取余 。 math.fmod(3,2),1.0 。 |
fsum(x) |
返回序列中各元素之和 。 math.fsum([1,2,3,4,5]),15.0 。 |
factorial(x) |
返回x的阶乘 。 math.factorial(3),6 。 |
gcd(x,y) |
返回整数x和y的最大公约数 。 math.gcd(2,6),2 。 |