自学Python第六天- python 常用的内置函数、类、方法及内置模块
- 序列相关
- enumerate() 转换为枚举型
- eval() 执行字符串表达式
- range() 生成整数列表
- map() 映射
- zip() 打包
- filter() 过滤
- slice() 切片
- join() 加入
- str 的一些方法
- str.find(str)|返回该元素最小的索引,如果没有则返回-1
- str.rfind(str) 同 str.find() 只是从右边开始找
- str.replace(old,new[,count])|将old字符替换为new字符,重复count次,无count则是全部替换
- str.split(seq=None)|以seq分割字符串,返回列表(数组)。默认值为None,以空格分割
- str.startswith(prefix[,start[,end]])|判断字符串是否以前缀开始,返回bool值
- str.endswith(suffix[,start[,end]])|判断字符串是否以尾缀结束,返回bool值
- str.lower()|字符串全部转为小写
- str.upper()|字符串全部转为大写
- str.swapcase() 反转大小写
- str.strip([chars])|去掉字符串左右的字符,默认为空格
- str.lstrip 去掉左边一个空格
- str.rstrip 去掉右边一个空格
- str.isdigit()|判断字符串是否全为数字,返回bool值
- str.isalpha()|判断字符串是否全为字母,返回bool值
- str.isalnum()|判断字符串是否全为数字或字母(不存在特殊字符),返回bool值
- str.islower() 判断字符串是否全小写
- str.isupper() 判断字符串是否全大写
- str.isnumeric() 判断字符串是否全数字字符(汉字数字也算)
- str.isdecimal() 判断字符串是否只有十进制字符
- del()
- `len()` 返回列表的长度
- `max()` 返回列表所有元素中值最大的一个
- `min()` 返回列表所有元素中值最小的一个
- `reversed()`,`sorted()` (反转和排序)
- list 的一些方法
- set 的一些方法
- `set.add(element)` 添加
- `set.update(object)` 更新
- `x.difference(y)` 返回差集,即元素包含在 x ,但不包含在 y
- `x.difference_update(y)` 和 difference 类似,但是不返回值,而是将差集覆盖 x
- `x.intersection(y)` 返回交集,即又包含在 x 又包含在 y
- `x.intersection_update(y)` 使用交集更新覆盖 x
- `x.isdisjoint(y)` 判断 x 和 y 是否有相同的元素。有则返回 False ,没有则返回 True
- `x.issubset(y)` 判断 x 是否全部包含在 y 中,即是 y 的子集
- `x.issuperset(y)` 判断 x 是否是 y 的父集
- `set.discard()` 删除指定元素,和 remove() 方法区别是如果需要删除的元素不存在,remove() 会报错,discard() 不会报错
- dict 的一些方法
- `dict.get(key[,default])` 返回指定键的值,如果值不在字典中,则返回 default 值
- `dict.setdefault(key,default=None)` 和 get() 方法类似,但如果不存在则添加键并将值设为 default
- `dict.update(dict2)` 将字典 dict2 的键值对更新到 dict 中。
- `dict.items()` 以列表返回可历遍的 (键,值)元组对
- `dict.keys()` 以列表返回字典所有的键
- `dict.values()` 以列表返回字典所有的值
- `dict.fromkeys(iterable[,value])` 返回一个字典,其 key 为 iterable 内的元素,value 默认值为 None(经测试和变量 dict 无关)
- 数值相关
- math 模块
- random() 模块
- `random.choice(seq)` 从序列 seq 中随机取一个元素并返回。
- `random.randrange([start,]stop[,step])` 在从 start 到 stop -1 的范围内,以步长 step 的形式获取集合并从中返回一个随机数
- `random.randint(a,b)` 在从 a 到 b 的整数区间内取一个随机数
- `random.random()` 随机生成一个实数,范围在 [0 , 1) 之间。
- `random.shuffle(list)` 将列表 list 随机打乱,没有返回值
- `random.uniform(x,y)` 随机生成一个实数,范围在 [x , y] 之间
- decimal 模块
- round() 四舍六入五单双(四舍六入五成偶)
- abs() 取绝对值
- reduce() 缩减
- 文件操作
- OS 模块
- 其他工具
- time 模块
- datetime 模块
- datetime.datetime(year,month,day,hour,minute,second,mircosecond) 指定时间,返回 datetime 对象
- datetime.datetime.today() 返回当前时间为 datetime 对象
- datetime.datetime.fromtimestamp(timeobj) 将时间戳转为 datetime 对象
- datetime_obj.timestamp() 把 datetime 类型的 datetime_obj 对象转为时间戳
- datetime.datetime.strptime(timestr,'北京时间:%Y/%m/%d %H:%M:%S') 将字符串按照格式转化为datetime 对象,需注意的是参数格式必须和字符串格式一致
- datetime_obj.date() 获取 datetime 对象对应的 date 对象
- datetime_obj.time() 获取 datetime 对象对应的 time 对象
- datetime_obj.weekday() 获取周几,从周一 = 0 开始
- datetime_obj.isoweekday() 获取周几,从周一 = 1 开始
- datetime_obj.strftime(format) 以 format 格式返回时间字符串
- calendar 模块
- json 模块
- re 模块
- logging 模块
python 用很多常用的比较有用的内置函数、类及方法(以下统称为方法或函数),这里做下分类总结
序列相关
此类方法常用于操作序列类型的数据
enumerate() 转换为枚举型
可以将一个可迭代对象转换为枚举型,即索引号和元素对应的类型
list_1 = [1, 3, 66, 96, 'ddd', ' ttg', 100]
enm = enumerate(list_1)
print(list(enm)) # 执行结果: [(0, 1), (1, 3), (2, 66), (3, 96), (4, 'ddd'), (5, ' ttg'), (6, 100)]
eval() 执行字符串表达式
eval(str)
是内置函数,作用是执行字符串 str 的表达式。例如:
>>>x = 7
>>>eval('3 * x')
21
>>>eval('2 + 2')
4
而 eval() 函数在python 中最常用的就是将一个字符串转为列表/字典/元组。
a = "{1: 'a', 2: 'b'}"
b = eval(a)
print(type(b), b) # 执行结果: <class 'dict'> {1: 'a', 2: 'b'}
c = '[[1,2], [3,4], [5,6], [7,8], [9,0]]'
d = eval(c)
print(type(d), d) # 执行结果: <class 'list'> [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
e = "([1,2], [3,4], [5,6], [7,8], (9,0))"
f = eval(e)
print(type(f), f) # 执行结果: <class 'tuple'> ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
即字符串是由哪种类型生成的,则转为哪种类型并执行。
需要注意的是,千万不要使用 eval 直接转换 input 的结果。因为 input 可能会被输入一些可指定的代码,例如删除文件之类的。
range() 生成整数列表
range()
函数将生成一个整数列表,其使用方法有两种:
range(stop)
生成一个从 0 到 stop (不含)的 range 对象型的整数列表range(start, stop[, step])
生成一个从 start 开始,到 stop (不含)的 range 对象型整数列表,可以按步进 step 生成
多用于辅助 for 循环
map() 映射
map(func,*interators)
可以将 *interator 中的元素依次经过 func 函数的处理,然后将返回值组合成一个新的对象。
list_1 = list('123456')
list_1 = list(map(int, list_1))
print(list_1) # [1, 2, 3, 4, 5, 6]
zip() 打包
zip(*iterables)
将参数中的可迭代对象按照一一对应的方式进行打包。’
li_1, li_2 = ('name', 'age'), ('amy', 18)
print(dict(zip(li_1, li_2))) # {'name': 'amy', 'age': 18}
filter() 过滤
filter()
用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元组组成的新 filter 对象型列表。使用方法:
filter(func, iterable)
参数 func 是过滤条件的自定义函数,iterable 是需要过滤的可迭代对象
函数将 iterable 对象的每个元素传入 func 进行判断,取返回值 True 的元素构建新的 filter 对象。
odd = filter(lambda n: n%2 == 1, range(1, 11))
print(list(odd))
slice() 切片
obj[slice(stop)]
或 obj[slice(start, stop[, step])]
,可以将可切片的对象 obj 按照元素索引,从第 start 到 stop - 1 按照步长 step 的方式进行切片(取单个元素)并返回。可以用于 str / tuple / list 型。等同于切片模式 obj[start:stop:step]
str = 'hello world'
print(str[slice(2,7,2)]) # 执行结果: low
print(str[2:7:2]) # 执行结果: low
join() 加入
str.join(*args)
将若干字符串或字符串序列 args 的元素以字符串 str 连接,返回一个新的字符串
list_1 = ['11', '22', '33', '44']
j = "- -".join(list_1)
print(j) # 执行结果: 11- -22- -33- -44
str 的一些方法
也可用于 list ,部分可用于 tuple
str.find(str)|返回该元素最小的索引,如果没有则返回-1
str.rfind(str) 同 str.find() 只是从右边开始找
str.replace(old,new[,count])|将old字符替换为new字符,重复count次,无count则是全部替换
str.split(seq=None)|以seq分割字符串,返回列表(数组)。默认值为None,以空格分割
str.startswith(prefix[,start[,end]])|判断字符串是否以前缀开始,返回bool值
str.endswith(suffix[,start[,end]])|判断字符串是否以尾缀结束,返回bool值
str.lower()|字符串全部转为小写
str.upper()|字符串全部转为大写
str.swapcase() 反转大小写
str.strip([chars])|去掉字符串左右的字符,默认为空格
str.lstrip 去掉左边一个空格
str.rstrip 去掉右边一个空格
str.isdigit()|判断字符串是否全为数字,返回bool值
str.isalpha()|判断字符串是否全为字母,返回bool值
str.isalnum()|判断字符串是否全为数字或字母(不存在特殊字符),返回bool值
str.islower() 判断字符串是否全小写
str.isupper() 判断字符串是否全大写
str.isnumeric() 判断字符串是否全数字字符(汉字数字也算)
str.isdecimal() 判断字符串是否只有十进制字符
del()
len()
返回列表的长度
max()
返回列表所有元素中值最大的一个
min()
返回列表所有元素中值最小的一个
reversed()
,sorted()
(反转和排序)
list 的一些方法
部分可用于 str / tuple
list.remove()
删除元素
list.pop()
弹出索引的元素,默认最后一个
list.reverse()
将列表自身逆序
list.sort()
将列表升序排序 key = abs (key是规则,可以使用函数)
默认升序排序,是操作在原数据上。
list.sort([reverse = 0 or 1])
reverse 为1(True)降序,为0(False)升序,默认0
list.sort([key=func])
按照 func 函数返回的关键字进行排序
list.append()
将参数对象作为元素添加至列表结尾
list.extend()
将序列对象的元素逐个添加至列表结尾
list.insert()
将参数对象插入到列表的参数索引处
list.count()
返回参数元素在列表中出现的次数
set 的一些方法
set.add(element)
添加
set.update(object)
更新
x.difference(y)
返回差集,即元素包含在 x ,但不包含在 y
x.difference_update(y)
和 difference 类似,但是不返回值,而是将差集覆盖 x
x.intersection(y)
返回交集,即又包含在 x 又包含在 y
x.intersection_update(y)
使用交集更新覆盖 x
x.isdisjoint(y)
判断 x 和 y 是否有相同的元素。有则返回 False ,没有则返回 True
x.issubset(y)
判断 x 是否全部包含在 y 中,即是 y 的子集
x.issuperset(y)
判断 x 是否是 y 的父集
set.discard()
删除指定元素,和 remove() 方法区别是如果需要删除的元素不存在,remove() 会报错,discard() 不会报错
dict 的一些方法
dict.get(key[,default])
返回指定键的值,如果值不在字典中,则返回 default 值
dict.setdefault(key,default=None)
和 get() 方法类似,但如果不存在则添加键并将值设为 default
dict.update(dict2)
将字典 dict2 的键值对更新到 dict 中。
dict.items()
以列表返回可历遍的 (键,值)元组对
dict.keys()
以列表返回字典所有的键
dict.values()
以列表返回字典所有的值
dict.fromkeys(iterable[,value])
返回一个字典,其 key 为 iterable 内的元素,value 默认值为 None(经测试和变量 dict 无关)
数值相关
此类方法多用于数值处理、计算等
math 模块
提供标准运算函数的标准库
math.ceil() 向上取整
math.floor() 向下取整
math.pow() 取幂次
random() 模块
randon 模块常用来取随机值
random.choice(seq)
从序列 seq 中随机取一个元素并返回。
random.randrange([start,]stop[,step])
在从 start 到 stop -1 的范围内,以步长 step 的形式获取集合并从中返回一个随机数
random.randint(a,b)
在从 a 到 b 的整数区间内取一个随机数
random.random()
随机生成一个实数,范围在 [0 , 1) 之间。
random.shuffle(list)
将列表 list 随机打乱,没有返回值
random.uniform(x,y)
随机生成一个实数,范围在 [x , y] 之间
decimal 模块
用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算
round() 四舍六入五单双(四舍六入五成偶)
abs() 取绝对值
reduce() 缩减
reduce()
函数是内置模块 functools 的函数,使用时需要导入,其使用方法:
reduce(func, iterable)
将 iterable 内的元素按照 func 的需要传入并处理,然后将返回值作为新的 func 参数联合 iterable 内剩余的元素依次传入 func 进行处理,直到 iterable 内所有的元素均处理完成。
reduce()
可以把多个参数合并操作,也就是从多个条件简化得出结果,例:
from functools import reduce
def multi(x, y):
return x * y
reduce(multi, range(1,4)) # 相当于 ((1*2)*3)
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) # 相当于 ((((1+2)+3)+4)+5)
需注意的是,每次只能传递和处理2个参数(包含返回值)。
文件操作
open() 创建或打开文件
open(filename[,mode,encoding])
返回创建或打开的文件对象。filename 是文件名,mode 是打开方式 ,encoding 是编码格式,默认为 gbk。文件类型分为文本文件和二进制文件。
file = open('a.txt','r')
print(file.readlines())
file.close()
参数 mode 的内容:
- r :以只读模式打开文件。指针在文件开始
- w :以只写模式打开文件,如文件不存在则创建,如存在则覆写。指针在文件开头
- a :以追加模式打开文件,如文件不存在则创建,如存在则在末尾追加内容。指针在原文件末尾
- b :以二进制方式打开文件,不能单独使用,需与其他模式一起使用,如 rb 或 wb 等
- + :以读写模式打开文件,不能单独使用,需与其他模式一起使用,如 a+ 等
file = open('b.txt','w')
file.write('你好,中国!')
file.close()
file 对象的常用方法
方法 | 描述 |
---|---|
file.close() | 将缓冲区的内容写入文件并关闭 |
file.flush() | 将缓冲区的内容写入文件,不关闭 |
file.read([size]) | 从文件读取指定的字节数,如未给定或负数则读取所有 |
file.readline([size]) | 读取整行,包含 \n 字符。如指定非负参数,则返回指定大小的字节数 |
file.readlines | 读取所有行直到结束,并返回列表 |
file.seek(offset[,whence]) | 移动指针到指定位置,offset 为偏移量,whence 默认值为0从头开始,为1从当前位置,为2从文件末尾开始 |
file.tell() | 返回指针当前位置 |
file.write(str) | 向文件写入指定字符串(如果文件以 wb 方式打开,写入的字符串要用 b’str’ 形式。 |
file.writelines(seq) | 向文件写入序列的字符串 |
文件对象的常用方法
文件对象有以下的常用方法
read([size])
:从文件中读取 size 个字节或字符的内容并返回。若省略参数则读取所有内容。readline()
:从文本文件中读取一行内容。readlines()
:把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回。write(str)
:将字符串 str 内容写入文件,也可以写入二进制流。writelines(s_list)
:将字符串列表 s_list 写入文本文件,不添加换行符。seek(offset[,whence])
:把文件指针移动到新的位置,offset 表示相对于 whence 的位置。 offset 为正则往后移动,为负往前移动。whence 为0表示从头开始计算(默认值),为1表示从当前位置开始计算,为2表示从文件尾开始计算。tell()
:返回文件指针的当前位置。flush()
:把缓冲区的内容写入文件,但不关闭文件。close()
:把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源。
OS 模块
os.system(app)
:执行系统注册的文件,相当于在运行对话框内直接输入应用文件名os.startfile(path)
:执行 path 路径指向的可执行文件os.getcwd()
:返回当前的工作目录os.listdir(path)
:返回指定路径下的文件和目录信息os.mkdir(path[,mode])
:创建目录(Dos 命令里的 md)os.makedirs(path1/path2...[,mode])
:创建多级目录os.rmdir(paht)
:删除目录(Dos 命令里的 rd)os.removedirs(paht1/path2......)
:删除多级目录os.chdir(paht)
:将 path 设为当前工作目录(Dos 命令里的 cd)
OS.path 模块
os.path.abspath(path)
:用于获取文件或目录的绝对路径os.path.exists(path)
:用于判断文件或目录是否存在,返回 bool 值os.path.join(path,name)
:将目录与目录或文件名拼接起来os.path.splitext()
:分离文件名和扩展名os.path.split()
:分离路径和文件名os.path.basename(path)
:从一个目录中提取文件名os.path.dirname(paht)
:从一个路径中提取文件路径,不包括文件名os.path.isdir(paht)
:用于判断是否为路径
其他工具
sys 模块
提供与 python 解释器及环境操作相关的标准库
sys.getsizeof() 获取占用内存大小
sys.getsizeof(obj)
可以获取参数对象所占内存的大小
import sys
print(sys.getsizeof(45)) # 28
print(sys.getsizeof(True)) # 28
print(sys.getsizeof('45')) # 51
print(sys.getsizeof(sys)) # 72
os 模块
提供访问操作系统服务功能的标准库
calendar 模块
提供与日期相关的各种函数的标准库
urllib 包
用于读取来自网络(服务器)的数据的标准库
urllib.request.urlopen() 对一个网址进行请求
urllib.request.urlopen(url)
对网站发送请求,并返回一个 http.client.HTTPResponse 对象。可以使用 .read() 读取其内容。
time 模块
提供与时间相关的各种函数的标准库
time.time() 获取当前时间
time.time()
返回从 1970年1月1日零时开始计时到现在经历的秒数。
time.localtime() 将秒时间转换成本地时间
time.localtime(second)
将一个从1970年1月1日零时开始计时的秒数转换成本地时间,以 time.struct_time 类型(时间元组)返回。如果没有参数则默认取当前时间。
time.asctime() 将时间元组转成可读取的时间,默认当前时间
time.strftime() 格式化日期
print(time.strftime('%y-%m-%d %H:%M:%S',time.localtime())) # 参数2可以省略,默认当前时间
日期格式化符号:
符号 | 描述 |
---|---|
%y | 2位数的年(0-99) |
%Y | 4位数的年(0000-9999) |
%m | 月份(01-12) |
#d | 日(0-31) |
%H | 24小时制小时数(0-23) |
%I | 12小时制小时数(01-12) |
%M | 分钟数(00-59) |
%S | 秒(00-59) |
%a | 简化星期几名称(英文) |
%A | 完整星期几名称(英文) |
%b | 简化月份名称(英文) |
%B | 完整月份名称(英文) |
%c | 本地日期时间表示(英文) |
%j | 年内的某天(001-366) |
%p | 本地 AM 或 PM |
%U | 星期数(00-53),周日为星期开始 |
%w | 星期几(0-6),周日为星期开始 |
%W | 星期数(00-53),周一为星期开始 |
time.mktime() 接收时间元组并返回时间戳
time.sleep(secs) 推迟调用线程的运行 secs 秒
time.strptime(str,format=‘%a %b %d %H:%M:%S %Y’) 根据 format 的格式把一个时间字符串解析为时间元组
datetime 模块
datetime 模块下的 datetime 能够使用属性快速的获取需要的时间属性。例如 datetime.year / datetime.hour / datetime.tzinfo 等
datetime.datetime(year,month,day,hour,minute,second,mircosecond) 指定时间,返回 datetime 对象
datetime.datetime.today() 返回当前时间为 datetime 对象
datetime.datetime.fromtimestamp(timeobj) 将时间戳转为 datetime 对象
datetime_obj.timestamp() 把 datetime 类型的 datetime_obj 对象转为时间戳
datetime.datetime.strptime(timestr,‘北京时间:%Y/%m/%d %H:%M:%S’) 将字符串按照格式转化为datetime 对象,需注意的是参数格式必须和字符串格式一致
datetime_obj.date() 获取 datetime 对象对应的 date 对象
datetime_obj.time() 获取 datetime 对象对应的 time 对象
datetime_obj.weekday() 获取周几,从周一 = 0 开始
datetime_obj.isoweekday() 获取周几,从周一 = 1 开始
datetime_obj.strftime(format) 以 format 格式返回时间字符串
calendar 模块
calendar 模块可用来打印日历。
import calendar
cal = calendar.month(2019,10)
print(cal)
# 执行结果:
# October 2019
# Mo Tu We Th Fr Sa Su
# 1 2 3 4 5 6
# 7 8 9 10 11 12 13
# 14 15 16 17 18 19 20
# 21 22 23 24 25 26 27
# 28 29 30 31
calendar.isleap(year) 判断 year 年是否是闰年
calendar.leapdays(y1,y2) 返回 y1, y2 两个年份之间的闰年总数
json 模块
用于使用 JSON 序列化好反序列化对象
re 模块
用于在字符串中执行正则表达式匹配和替换
logging 模块
提供了灵活的记录事件、错误、警告和调试信息等日志信息的功能