Python 不仅在 Python 标准库包含了大量的模块(标准模块),还有很多第三方模块,也可以自定义模块。
目录
1. 概念
1.1 模块
在 Python 中,一个扩展名 “.py” 的文件就称之为一个模块。模块是一个包含所有定义的函数和变量的文件;模块可以被别的程序引入(标准库的方法),以使用该模块中的函数等功能。
1.2 包
包是存放模块的文件夹,包中包含 __init__.py 和其他模块,__init__.py 可为空也可定义属性和方法。一个模块的名称是 “包名.模块名”,这种形式无需担心不同库之间的模块重名。
2. 使用模块
2.1 创建模块
创建模块就是写一个 .py 文件。在创建好包后,PyCharm 已经自动创建了一个空文件 __init__.py。模块命名是区分大小写的。
2.2 导入包
在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包。
2.3 引入模块
使用模块首先需要以模块形式加载模块中的代码。一个模块只会被导入一次,之后再搜索时会屏蔽。
使用 import 语句导入
使用 import 语句导入模块时,默认情况下,会以下顺序进行查找:
- 在当前目录下查找
- 到 PYTHONPATH(变量环境)下的每个目录查找
- 到 Python 的默认安装路径目录下查找
import 包名1.包名2...模块名 [as alias]
注:as alias 是模块的别名。
使用 from···import 语句导入
也是一种从指定包引入模块的方式,还可以从模块中导入一个指定的部分到当前命名空间。
from 包名1.包名2... import 模块名
from 包名1.包名2...模块名 import 变量名/函数名
使用 from … import * 语句导入
可以把一个模块的所有内容全都导入到当前的命名空间。
from 模块名 import *
示例:
# 假设创建以下包和模块:
# package
# |- pg1
# |- - __init__.py
# |- - a.py
# |- - b.py
# |- pg2
# |- - __init__.py
# |- - c.py
# |- - d.py
# a 模块中引入 b 模块
import pg1.b
from pg1 import b
# a 模块中引入 c 模块
import pg2.c
from pg2 import c
# a 模块中引入 c 模块和 d 模块
import pg2.c,pg2.d
from pg2 import c,d
# a 模块中引入包 pg2 下的所有模块
from pg2 import *
# a 模块中引入 d 模块中函数 d()
from pg2.d import d
# 调用函数 d()
d()
__name__属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果想在模块被引入时,模块中的某一程序块不执行,可以用 __name__ 属性来使该程序块仅在该模块自身运行时执行。
# Filename: using_name.py
if __name__ == '__main__':
print('程序自身在运行')
else:
print('我来自另一模块')
运行输出如下:
$ python using_name.py
程序自身在运行
$ python
>>> import using_name
我来自另一模块
>>>
说明: 每个模块都有一个__name__属性,当其值是 '__main__' 时,表明该模块自身在运行,否则是被引入。
2.4 调用模块内容
在调用模块中的变量、函数或者类时,要在其前添加 “模块名.” 作前缀。示例如下:
# Filename: support.py
def print_func( par ):
print ("Hello : ", par)
return
# Filename: test.py
# 导入模块
import support
# 现在可以调用模块里包含的函数了
support.print_func("World")
dir() 函数
内置的函数 dir() 可以找到模块内定义的所有名称,以一个字符串列表的形式返回。使用如下:
>>> import fibo, sys
>>> dir(fibo)
如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称:
>>> a = [1, 2, 3, 4, 5]
>>> import fibo
>>> fib = fibo.fib
>>> dir() # 得到一个当前模块中定义的属性列表
['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']
2.5 其他模块
常用内置标准模块
模块名 | 描述 |
random | 提供与随机数生成相关函数 |
sys | 与 Python 解释器及其环境操作相关的标准库 |
time | 提供与时间相关函数的标准库 |
os | 提供访问操作系统服务功能的标准库 |
calendar | 提供与日期相关函数的标准库 |
urllib | 用于读取来自网上(服务器)的数据库的标准库 |
json | 用于使用JSON序列化和反序列对象 |
re | 用于字符串中执行正则表达式匹配和替换 |
math | 提供标准算术运算函数的标准库 |
decimal | 用于进行精确控制运算精度、有效数位和四舍五入操作的十进制数 |
shutil | 用于进行高级文件操作 |
logging | 提供灵活的记录事件、错误、警告和调试信息等日志信息的功能 |
tkinter | 使用 Python 进行 GUI 编程的标准库 |
第三方模块的下载与安装
使用 pip 命令实现。
pip<command> [模块名]
【command】指定要执行的命令:
- install:安装第三方模块
- list:显示已安装的第三方模块
- uninstall:卸载已安装第三方模块
3. os 模块
- os 模块主要负责与操作系统进行交互。Python 的 os 模块提供了各种操作系统的接口,这些接口主要是用来操作文件和目录。
- Python 中所有依赖于操作系统的内置模块统一设计方式为:对于不同操作系统可用的相同功能使用相同的接口,这样大大增加了代码的可移植性。
常用函数
【os.getcwd() 】查看当前路径。
import os
print(os.getcwd())
【os.listdir(path)】返回指定目录下包含的文件和目录名列表。
import os
print(os.listdir('E:/'))
【os.path.abspath(path)】返回路径 path 的绝对路径。
import os
# 当前路径(相对路径方式)
print(os.path.abspath('.'))
【os.path.split(path)】将路径 path 拆分为目录和文件两部分,返回结果为元组类型。
import os
print(os.path.split('E:/tmp.txt'))
【os.path.join(path, *paths)】将一个或多个 path(文件或目录) 进行拼接。
import os
print(os.path.join('E:/', 'tmp.txt'))
【os.path.getctime(path)】返回 path(文件或目录) 在系统中的创建时间。
import os
import datetime
print(datetime.datetime.utcfromtimestamp(os.path.getctime('E:/tmp.txt')))
【os.path.getmtime(path)】返回 path(文件或目录)的最后修改时间。
import os
import datetime
print(datetime.datetime.utcfromtimestamp(os.path.getmtime('E:/tmp.txt')))
【os.path.getatime(path)】返回 path(文件或目录)的最后访问时间。
import os
import datetime
print(datetime.datetime.utcfromtimestamp(os.path.getatime('E:/tmp.txt')))
【os.path.exists(path)】判断 path(文件或目录)是否存在,存在返回 True,否则返回 False。
import os
print(os.path.exists('E:/tmp.txt'))
【os.path.isdir(path)】判断 path 是否为目录。
import os
print(os.path.isdir('E:/'))
【os.path.isfile(path)】判断 path 是否为文件。
import os
print(os.path.isfile('E:/tmp.txt'))
【os.path.getsize(path)】返回 path 的大小,以字节为单位,若 path 是目录则返回 0。
import os
print(os.path.getsize('E:/tmp.txt'))
print(os.path.getsize('E:/work'))
【os.mkdir()】创建一个目录。
import os
os.mkdir('E:/test')
【os.makedirs()】创建多级目录。
import os
os.makedirs('E:/test1/test2')
注:目录 test1、test2 均不存在,此时使用 os.mkdir() 创建会报错,os.mkdir() 创建目录时要保证末级目录之前的目录是存在的。
【os.chdir(path)】将当前工作目录更改为 path。
import os
print(os.getcwd())
os.chdir('/test')
print(os.getcwd())
【os.system(command)】调用 shell 脚本。
import os
print(os.system('ping www.baidu.com'))
注:如果出现乱码,可以通过修改编码解决,比如:我在 Windows 下 PyCharm 中出现乱码问题,可以将 PyCharm 中编码修改为 GBK 解决。
更多参考:Python3 OS 文件/目录方法 | 菜鸟教程 (runoob.com)
4. sys 模块
sys 模块提供了一系列用于控制 Python 运行环境的函数和变量,主要负责与 Python 解释器进行交互。
查看 sys 模块内容:
>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_enablelegacywindowsfsencoding', '_getframe', '_git', '_home', '_xoptions', 'api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_wrapper', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'set_asyncgen_hooks', 'set_coroutine_wrapper', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions', 'winver']
模块目录搜索
模块的各目录具体位置保存在标准模块 sys 的 sys.path 变量中,可以通过以下代码输出具体目录:
import sys
print(sys.path) # 输出具体目录
sys.path 输出是一个列表,其中第一项是空串 '',代表当前目录,即执行python解释器的目录。
临时添加文件目录
临时在导入模块文件中添加目录到 sys.path:
import sys
sys.path.append('E:/program/Python/Code/demo')
参数使用
【argv】返回传递给 Python 脚本的命令行参数列表。
# 文件名:test.py
import sys
if __name__ == '__main__':
args = sys.argv
print(args)
print(args[1])
在控制台使用命令 python test.py 123 abc 执行一下:
['test.py', '123', 'abc']
123
其他参数:
version | 返回 Python 解释器的版本信息 |
winver | 返回 Python 解释器主版号 |
platform | 返回操作系统平台名称 |
path | 返回模块的搜索路径列表 |
maxsize | 返回支持的最大整数值 |
maxunicode | 返回支持的最大 Unicode 值 |
copyright | 返回 Python 版权信息 |
modules | 以字典类型返回系统导入的模块 |
byteorder | 返回本地字节规则的指示器 |
executable | 返回 Python 解释器所在路径 |
函数使用
【stdout】标准输出。
import sys
# 下面两行代码等价
sys.stdout.write('Hi' + '\n')
print('Hi')
【stdin】标准输入。
import sys
s1 = input()
s2 = sys.stdin.readline()
print(s1)
print(s2)
【stderr】错误输出。
import sys
sys.stderr.write('this is a error message')
【exit()】退出当前程序。
import sys
print('Hi')
sys.exit()
print('Jhon')
其他函数:
getdefaultencoding() | 返回当前默认字符串编码的名称 |
getrefcount(obj) | 返回对象的引用计数 |
getrecursionlimit() | 返回支持的递归深度 |
getsizeof(object[, default]) | 以字节为单位返回对象的大小 |
setswitchinterval(interval) | 设置线程切换的时间间隔 |
getswitchinterval() | 返回线程切换时间间隔 |
5. argparse 模块
argparse 模块主要用于处理 Python 命令行参数和选项,程序定义好所需参数后,该模块会通过 sys.argv 解析出那些参数;此外,argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。使用 argparse 模块,可以轻松的编写出用户友好的命令行接口。
模块使用
# 文件名为 test.py
import argparse
# 创建解析对象
parser = argparse.ArgumentParser()
# 解析
parser.parse_args()
在控制输入命令 python test.py --help,执行结果:
usage: test.py [-h]
optional arguments:
-h, --help show this help message and exit
创建解析器
parser = argparse.ArgumentParser(description='这是一个示例程序。')
添加参数
使用 add_argument 方法来指定命令行参数。可以指定参数的名称、类型、帮助信息等。
parser.add_argument('echo', help='echo the string you use here')
parser.add_argument('-n', '--name', help='define your name')
parser.add_argument('-p', '--port', type=int, help='port to use')
解析参数
使用 parse_args() 方法来解析命令行参数。
args = parser.parse_args()
使用参数
解析后的参数可以通过属性访问。
print('echo: %s' % args.echo)
if args.name:
print('name: %s' % args.name)
if args.port:
print('port: %s' % args.port)
完整的示例:
import argparse
# 创建解析器
parser = argparse.ArgumentParser(description='这是一个示例程序。')
# 添加参数
parser.add_argument('echo', help='echo the string you use here')
parser.add_argument('-n', '--name', help='define your name')
parser.add_argument('-p', '--port', type=int, help='port to use')
# 解析参数
args = parser.parse_args()
# 使用参数
print('echo: %s' % args.echo)
if args.name:
print('name: %s' % args.name)
if args.port:
print('port: %s' % args.port)
在这个示例中,echo 是一个位置参数,而 -n
/--name
和 -p
/--port
是可选参数。你可以通过命令行传递这些参数来运行程序:
python script.py hello -n NIO -p 8080
这将输出:
echo: hello
name: NIO
port: 8080
6. 与时间相关的模块
6.1 time 模块
time 模块提供了很多与时间相关的类和函数。
6.1.1 struct_time 类
time 模块的 struct_time 类代表一个时间对象,可以通过索引和属性名访问值。 对应关系如下所示:
索引 | 属性 | 例值 |
0 | tm_year(年) | 1945 |
1 | tm_mon(月) | 1 ~ 12 |
2 | tm_mday(日) | 1 ~ 31 |
3 | tm_hour(时) | 0 ~ 23 |
4 | tm_min(分) | 0 ~ 59 |
5 | tm_sec(秒) | 0 ~ 61 (值 60 表示在闰秒的时间戳中有效) |
6 | tm_wday(周) | 0 ~ 6 |
7 | tm_yday(一年内第几天) | 1 ~ 366 |
8 | tm_isdst(夏时令) | -1、0、1 |
localtime() 表示当前时间,返回类型为 struct_time 对象:
import time
t = time.localtime()
print('t-->', t)
print('tm_year-->', t.tm_year)
print('tm_year-->', t[0])
运行结果:
t--> time.struct_time(tm_year=2024, tm_mon=10, tm_mday=21, tm_hour=16, tm_min=46, tm_sec=40, tm_wday=0, tm_yday=295, tm_isdst=0)
tm_year--> 2024
tm_year--> 2024
6.1.2 常用函数
函数(常量) | 说明 |
time() | 返回当前时间的时间戳 |
gmtime([secs]) | 将时间戳转换为格林威治天文时间下的 struct_time,可选参数 secs 表示从 epoch 到现在的秒数,默认为当前时间 |
localtime([secs]) | 与 gmtime() 相似,返回当地时间下的 struct_time |
mktime(t) | localtime() 的反函数 |
asctime([t]) | 接收一个 struct_time 表示的时间,返回形式为:Mon Dec 2 08:53:47 2019 的字符串 |
ctime([secs]) | ctime(secs) 相当于 asctime(localtime(secs)) |
strftime(format[, t]) | 格式化日期,接收一个 struct_time 表示的时间,并返回以可读字符串表示的当地时间 |
sleep(secs) | 暂停执行调用线程指定的秒数 |
altzone | 本地 DST 时区的偏移量,以 UTC 为单位的秒数 |
timezone | 本地(非 DST)时区的偏移量,UTC 以西的秒数(西欧大部分地区为负,美国为正,英国为零) |
tzname | 两个字符串的元组:第一个是本地非 DST 时区的名称,第二个是本地 DST 时区的名称 epoch |
示例:
import time
print(time.time())
print(time.gmtime())
print(time.localtime())
print(time.asctime(time.localtime()))
print(time.tzname)
# strftime 使用
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
运行结果:
1729500861.2436059
time.struct_time(tm_year=2024, tm_mon=10, tm_mday=21, tm_hour=8, tm_min=54, tm_sec=21, tm_wday=0, tm_yday=295, tm_isdst=0)
time.struct_time(tm_year=2024, tm_mon=10, tm_mday=21, tm_hour=16, tm_min=54, tm_sec=21, tm_wday=0, tm_yday=295, tm_isdst=0)
Mon Oct 21 16:54:21 2024
('中国标准时间', '中国夏令时')
2024-10-21 16:54:21
strftime 函数日期格式化符号说明:
符号 | 说明 |
%a | 本地化的缩写星期中每日的名称 |
%A | 本地化的星期中每日的完整名称 |
%b | 本地化的月缩写名称 |
%B | 本地化的月完整名称 |
%c | 本地化的适当日期和时间表示 |
%d | 十进制数 [01,31] 表示的月中日 |
%H | 十进制数 [00,23] 表示的小时(24小时制) |
%I | 十进制数 [01,12] 表示的小时(12小时制) |
%j | 十进制数 [001,366] 表示的年中日 |
%m | 十进制数 [01,12] 表示的月 |
%M | 十进制数 [00,59] 表示的分钟 |
%p | 本地化的 AM 或 PM |
%S | 十进制数 [00,61] 表示的秒 |
%U | 十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天) |
%w | 十进制数 [0(星期日),6] 表示的周中日 |
%W | 十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天) |
%x | 本地化的适当日期表示 |
%X | 本地化的适当时间表示 |
%y | 十进制数 [00,99] 表示的没有世纪的年份 |
%Y | 十进制数表示的带世纪的年份 |
%z | 时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示,其中 H 表示十进制小时数字,M 表示小数分钟数字 [-23:59, +23:59] |
%Z | 时区名称 |
%% | 字面的 ‘%’ 字符 |
6.2 datetime 模块
datatime 模块重新封装了 time 模块,提供了更多接口,变得更加直观和易于调用。
6.2.1 date 类
date 类表示一个由年、月、日组成的日期,格式为:
datetime.date(year, month, day)
- year 范围为:[1, 9999]
- month 范围为:[1, 12]
- day 范围为 [1, 给定年月对应的天数]
类方法和属性:
方法(属性) | 说明 |
today() | 返回当地的当前日期 |
fromtimestamp(timestamp) | 根据给定的时间戮,返回本地日期 |
min | date 所能表示的最小日期 |
max | date 所能表示的最大日期 |
示例:
import datetime
import time
print(datetime.date.today())
print(datetime.date.fromtimestamp(time.time()))
print(datetime.date.min)
print(datetime.date.max)
方法和属性:
方法(属性) | 说明 |
replace(year, month, day) | 生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性 |
timetuple() | 返回日期对应的 struct_time 对象 |
weekday() | 返回一个整数代表星期几,星期一为 0,星期天为 6 |
isoweekday() | 返回一个整数代表星期几,星期一为 1,星期天为 7 |
isocalendar() | 返回格式为 (year,month,day) 的元组 |
isoformat() | 返回格式如 YYYY-MM-DD 的字符串 |
strftime(format) | 返回自定义格式的字符串 |
year | 年 |
month | 月 |
day | 日 |
示例:
import datetime
td = datetime.date.today()
print(td.replace(year=1945, month=8, day=15))
print(td.timetuple())
print(td.weekday())
print(td.isoweekday())
print(td.isocalendar())
print(td.isoformat())
print(td.strftime('%Y %m %d %H:%M:%S %f'))
print(td.year)
print(td.month)
print(td.day)
6.2.2 time 类
time 类表示由时、分、秒、微秒组成的时间,格式为:
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
- hour 范围为:[0, 24)
- minute 范围为:[0, 60)
- second 范围为:[0, 60)
- microsecond 范围为:[0, 1000000)
- fold 范围为: [0, 1]
实例方法和属性:
方法(属性) | 说明 |
isoformat() | 返回 HH:MM:SS 格式的字符串 |
replace(hour, minute, second, microsecond, tzinfo, * fold=0) | 创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性 |
strftime(format) | 返回自定义格式的字符串 |
hour | 时 |
minute | 分 |
second | 秒 |
microsecond | 微秒 |
tzinfo | 时区 |
示例:
import datetime
t = datetime.time(10, 10, 10)
print(t.isoformat())
print(t.replace(hour=9, minute=9))
print(t.strftime('%I:%M:%S %p'))
print(t.hour)
print(t.minute)
print(t.second)
print(t.microsecond)
print(t.tzinfo)
6.2.3 datetime 类
datetime 包括了 date 与 time 的所有信息,格式为:
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
类方法和属性:
方法(属性) | 说明 |
today() | 返回当地的当前时间 |
now(tz=None) | 类似于 today(),可选参数 tz 可指定时区 |
utcnow() | 返回当前 UTC 时间 |
fromtimestamp(timestamp, tz=None) | 根据时间戳返回对应时间 |
utcfromtimestamp(timestamp) | 根据时间戳返回对应 UTC 时间 |
combine(date, time) | 根据 date 和 time 返回对应时间 |
min | datetime 所能表示的最小日期 |
max | datetime 所能表示的最大日期 |
示例:
import datetime
print(datetime.datetime.today())
print(datetime.datetime.now())
print(datetime.datetime.utcnow())
print(datetime.datetime.fromtimestamp(time.time()))
print(datetime.datetime.utcfromtimestamp(time.time()))
print(datetime.datetime.combine(datetime.date(2019, 12, 1), datetime.time(10, 10, 10)))
print(datetime.datetime.min)
print(datetime.datetime.max)
实例方法和属性示例:
import datetime
td = datetime.datetime.today()
print(td.date())
print(td.time())
print(td.replace(day=11, second=10))
print(td.weekday())
print(td.isoweekday())
print(td.isocalendar())
print(td.isoformat())
print(td.strftime('%Y-%m-%d %H:%M:%S .%f'))
print(td.year)
print(td.month)
print(td.month)
print(td.hour)
print(td.minute)
print(td.second)
print(td.microsecond)
print(td.tzinfo)
6.3 calendar 模块
calendar 模块提供了很多可以处理日历的函数。
6.3.1 常用函数
方法 | 说明 |
setfirstweekday(weekday) | 设置每一周的开始(0 表示星期一,6 表示星期天) |
firstweekday() | 返回当前设置的每星期的第一天的数值 |
isleap(year) | 如果 year 是闰年则返回 True ,否则返回 False |
leapdays(y1, y2) | 返回 y1 至 y2 (包含 y1 和 y2 )之间的闰年的数量 |
weekday(year, month, day) | 返回指定日期的星期值 |
monthrange(year, month) | 返回指定年份的指定月份第一天是星期几和这个月的天数 |
month(theyear, themonth, w=0, l=0) | 返回月份日历 |
prcal(year, w=0, l=0, c=6, m=3) | 返回年份日历 |
示例:
import calendar
calendar.setfirstweekday(1)
print(calendar.firstweekday())
print(calendar.isleap(2019))
print(calendar.leapdays(1945, 2019))
print(calendar.weekday(2019, 12, 1))
print(calendar.monthrange(2019, 12))
print(calendar.month(2019, 12))
print(calendar.prcal(2019))
6.3.2 Calendar 类
Calendar 对象提供了一些日历数据格式化的方法,实例方法:
方法 | 说明 |
iterweekdays() | 返回一个迭代器,迭代器的内容为一星期的数字 |
itermonthdates(year, month) | 返回一个迭代器,迭代器的内容为年 、月的日期 |
示例:
from calendar import Calendar
c = Calendar()
print(list(c.iterweekdays()))
for i in c.itermonthdates(2019, 12):
print(i)
6.3.3 TextCalendar 类
TextCalendar 为 Calendar子类,用来生成纯文本日历。实例方法:
方法 | 说明 |
formatmonth(theyear, themonth, w=0, l=0) | 返回一个多行字符串来表示指定年、月的日历 |
formatyear(theyear, w=2, l=1, c=6, m=3) | 返回一个 m 列日历,可选参数 w, l, 和 c 分别表示日期列数, 周的行数, 和月之间的间隔 |
示例:
from calendar import TextCalendar
tc = TextCalendar()
print(tc.formatmonth(2019, 12))
print(tc.formatyear(2019))
6.3.4 HTMLCalendar类
HTMLCalendar 类可以生成 HTML 日历。实例方法:
方法 | 说明 |
formatmonth(theyear, themonth, withyear=True) | 返回一个 HTML 表格作为指定年、月的日历 |
formatyear(theyear, width=3) | 返回一个 HTML 表格作为指定年份的日历 |
formatyearpage(theyear, width=3, css=‘calendar.css’, encoding=None) | 返回一个完整的 HTML 页面作为指定年份的日历 |
示例:
from calendar import HTMLCalendar
hc = HTMLCalendar()
print(hc.formatmonth(2019, 12))
print(hc.formatyear(2019))
print(hc.formatyearpage(2019))
7. random 模块
random 模块主要用于生成随机数,它实现了各种分布的伪随机数生成器。
使用示例
使用 random() 方法返回一个随机数,它在半开放区间 [0,1) 范围内:包含 0 但不包含 1。
# 导入 random 包
import random
# 生成随机数
print(random.random())
# 输出结果:0.5999043177030692
seed() 方法改变随机数生成器的种子,在调用其他随机模块函数之前调用此函数。
import random
random.seed()
print ("使用默认种子生成随机数:", random.random())
print ("使用默认种子生成随机数:", random.random())
random.seed(10)
print ("使用整数 10 种子生成随机数:", random.random()) # 固定
random.seed(10)
print ("使用整数 10 种子生成随机数:", random.random()) # 固定
random.seed("hello",2)
print ("使用字符串种子生成随机数:", random.random()) # 固定
# 输出结果:
# 使用默认种子生成随机数: 0.28427456582214816
# 使用默认种子生成随机数: 0.5651806568612752
# 使用整数 10 种子生成随机数: 0.5714025946899135
# 使用整数 10 种子生成随机数: 0.5714025946899135
# 使用字符串种子生成随机数: 0.3537754404730722
randrange(start, stop[,step]) 方法从 range(start, stop, step) 返回一个随机选择的元素。
import random
print(random.randrange(0, 101, 2)) # 生成一个0到100之间的随机偶数
randint(a, b) 方法返回一个随机整数 N,满足 a ≤ N ≤ b。
import random
print(random.randint(1, 100)) # 生成一个1到100之间的随机整数
8. math 模块
math 模块提供了许多对浮点数的数学运算函数,函数的返回值均为浮点数,除非另有明确说明。如果需要计算复数,使用 cmath 模块中的同名函数。
模块常量
常量 | 描述 |
---|---|
e | 返回欧拉数 (2.7182...) |
inf | 返回正无穷大浮点数 |
nan | 返回一个浮点值 NaN (not a number) |
pi | π 一般指圆周率。 圆周率 PI (3.1415...) |
tau | 数学常数 τ = 6.283185...,精确到可用精度。Tau 是一个圆周常数,等于 2π,圆的周长与半径之比。 |
模块方法
方法 | 描述 |
---|---|
cos(x) | 返回 x 弧度的余弦值。 |
cosh(x) | 返回 x 的双曲余弦值。 |
acos(x) | 返回 x 的反余弦,结果范围在 0 到 pi 之间。 |
acosh(x) | 返回 x 的反双曲余弦值。 |
atan(x) | 返回 x 的反正切值,结果范围在 -pi/2 到 pi/2 之间。 |
atan2(y, x) | 返回给定的 X 及 Y 坐标值的反正切值,结果是在 -pi 和 pi 之间。 |
atanh(x) | 返回 x 的反双曲正切值。 |
ceil(x) | 将 x 向上舍入到最接近的整数 |
copysign(x, y) | 返回一个基于 x 的绝对值和 y 的符号的浮点数。 |
degrees(x) | 将角度 x 从弧度转换为度数。 |
radians(x) | 将角度 x 从度数转换为弧度。 |
dist(p, q) | 返回 p 与 q 两点之间的欧几里得距离,以一个坐标序列(或可迭代对象)的形式给出。 两个点必须具有相同的维度。 |
erf(x) | 返回一个数的误差函数 |
erfc(x) | 返回 x 处的互补误差函数 |
fabs(x) | 返回 x 的绝对值。 |
factorial(x) | 返回 x 的阶乘。 如果 x 不是整数或为负数时则将引发 ValueError。 |
floor(x) | 将数字向下舍入到最接近的整数 |
isqrt() | 将平方根数向下舍入到最接近的整数 |
trunc(x) | 返回 x 截断整数的部分,即返回整数部分,删除小数部分 |
fmod(x, y) | 返回 x/y 的余数 |
prod(iterable) | 计算可迭代对象中所有元素的积。 |
gcd() | 返回给定的整数参数的最大公约数。 |
log(x[, base]) | 使用一个参数,返回 x 的自然对数(底为 e )。 |
log10(x) | 返回 x 底为 10 的对数。 |
log1p(x) | 返回 1+x 的自然对数(以 e 为底)。 |
log2(x) | 返回 x 以 2 为底的对数 |
pow(x, y) | 将返回 x 的 y 次幂。 |
exp(x) | 返回 e 的 x 次幂,Ex, 其中 e = 2.718281... 是自然对数的基数。 |
sqrt(x) | 返回 x 的平方根。 |
示例:
import math
def calculate_sphere_volume(radius):
# 使用math.pi获取圆周率π的值
volume = (4/3) * math.pi * (radius ** 3)
return volume
# 假设我们有一个半径为5的球体
radius = 5
volume = calculate_sphere_volume(radius)
print(f"半径为 {radius} 的球的体积是 {volume:.2f}")
9. statistics 模块
statistics 是标准库中的一个模块,模块提供了许多基本统计计算的函数。
方法 | 描述 |
---|---|
harmonic_mean() | 计算给定数据集的调和平均值。 |
mean() | 计算数据集的平均值 |
median() | 计算数据集的中位数 |
median_grouped() | 计算给定分组数据集的分组中位数 |
median_high() | 计算给定数据集的高位中位数 |
median_low() | 计算给定数据集的低位中位数。 |
mode() | 算数据集的众数(出现频率最高的值) |
pstdev() | 计算给定数据集的样本标准偏差 |
stdev() | 计算数据集的标准差 |
pvariance() | 计算给定数据集的样本方差 |
variance() | 计算数据集的方差 |
quantiles() | 计算数据集的分位数,可指定分位数的数量(默认为四分位数) |
示例:
import statistics
# 假设这是一组学生的考试成绩
scores = [85, 90, 78, 92, 83, 77, 88, 95, 85, 89]
# 计算平均分
mean_score = statistics.mean(scores)
print(f"平均分(Mean): {mean_score}")
# 计算中位数
median_score = statistics.median(scores)
print(f"中位数(Median): {median_score}")
# 计算众数
try:
mode_score = statistics.mode(scores)
print(f"众数(Mode): {mode_score}")
except statistics.StatisticsError as e:
print(e)
# 计算最小值
min_score = min(scores)
print(f"最低分(Min): {min_score}")
# 计算最大值
max_score = max(scores)
print(f"最高分(Max): {max_score}")
# 计算标准差
stdev_score = statistics.stdev(scores)
print(f"标准差(Standard Deviation): {stdev_score}")
# 计算方差
variance_score = statistics.variance(scores)
print(f"方差(Variance): {variance_score}")
10. operator 模块
operator 模块提供了一套与 Python 的内置运算符对应的高效率函数。
- 函数包含的种类有:对象的比较运算、逻辑运算、数学运算以及序列运算。
- 对象比较函数适用于所有的对象,函数名根据它们对应的比较运算符命名。
- 许多函数名与特殊方法名相同,只是没有双下划线。为了向后兼容性,也保留了许多包含双下划线的函数,为了表述清楚,建议使用没有双下划线的函数。
运算 | 函数 |
---|---|
加法 |
|
字符串拼接 |
|
包含测试 |
|
除法 |
|
除法 |
|
按位与 |
|
按位异或 |
|
按位取反 |
|
按位或 |
|
取幂 |
|
标识 |
|
标识 |
|
索引赋值 |
|
索引删除 |
|
索引取值 |
|
左移 |
|
取模 |
|
乘法 |
|
矩阵乘法 |
|
取反(算术) |
|
取反(逻辑) |
|
正数 |
|
右移 |
|
切片赋值 |
|
切片删除 |
|
切片取值 |
|
字符串格式化 |
|
减法 |
|
真值测试 |
|
比较 |
|
比较 |
|
相等 |
|
不等 |
|
比较 |
|
比较 |
|
示例:
# 导入 operator 模块
import operator
# 初始化变量
a = 4
b = 3
# 使用 add() 让两个值相加
print ("add() 运算结果 :",end="");
print (operator.add(a, b))
# 使用 sub() 让两个值相减
print ("sub() 运算结果 :",end="");
print (operator.sub(a, b))
# 使用 mul() 让两个值相乘
print ("mul() 运算结果 :",end="");
print (operator.mul(a, b))
标签:返回,python,模块,import,print,path,os
From: https://blog.csdn.net/weixin_74417251/article/details/144943074