复习python时的记录
输入输出
1、 读取键盘输入
输入 str = input(“请输入:”)(读取一行文字输入)
输出 print ("你输入的内容是: ", str)
2、read读和write写文件
① 打开文件 f = open(‘workfile’, ‘w’, encoding=“utf-8”);关闭文件 f.close()
with open('workfile', encoding="utf-8") as f:
read_data = f.read()
#或者
f = open('workfile', 'w', encoding="utf-8")
f.close()
权限说明
模式 | 解释 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
② 读取文件
方式 | 解释 |
---|---|
f.read(size) | 读取一定数目的数据, 然后作为字符串或字节对象返回 |
f.readline() | 读取单独的一行 |
f.readlines() | 返回该文件中包含的所有行为一个list |
③ 写文件
方式 | 解释 |
---|---|
f.write(string) | 将 string 写入到文件中, 然后返回写入的字符数 |
f.flush() | 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
f.writelines(sequence) | 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
f.tell() | 用于返回文件当前的读/写位置(即文件指针的位置),为一个整数 |
f.seek(offset, whence) | 用于移动文件指针到指定位置,offset 表示相对于 whence 参数的偏移量,from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾 |
f.truncate([size]) | 从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。 |
f.fileno() | 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 |
f.isatty() | 如果文件连接到一个终端设备返回 True,否则返回 False。 |
3、pickle模块
① 读:pkl_file = open(‘data.pkl’, ‘rb’);data1 = pickle.load(pkl_file)
② 写:pickle.dump(data1, output)
4、json格式
①
② 写json格式数据:json.dumps(x);json.dump(x, f)
数据与数据结构详解
1、数字类型
① 系统自带和math中的一些数学函数
函数 | 解释 |
---|---|
abs(x) | 返回数字的绝对值,如abs(-10) 返回 10 |
fabs(x) | 以浮点数形式返回数字的绝对值,如math.fabs(-10) 返回10.0 |
ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5 |
floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
round(x [,n]) | 返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。 |
modf(x) | 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。 |
exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 |
log(x) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0 |
pow(x, y) | x**y 运算后的值。 |
sqrt(x) | 返回数字x的平方根。 |
max(x1, x2,…) | 返回给定参数的最大值,参数可以为序列。 |
min(x1, x2,…) | 返回给定参数的最小值,参数可以为序列。 |
② 随机数函数
函数 | 解释 |
---|---|
choice(seq) | 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数。 |
randrange ([start,] stop [,step]) | 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1,例如 random.randrange(1, 100, 2),随机输出一个1-100内的奇数 |
random() | 随机生成一个实数,它在[0,1)范围内。 |
seed([x]) | 改变随机数生成器的种子seed,可以在调用其他随机模块函数之前调用此函数。预先使用 random.seed(x) 设定好种子之后,使用 random() 生成的随机数将会是同一个 |
shuffle(lst) | 将序列的所有元素随机排序 |
uniform(x, y) | 随机生成下一个实数,它在[x,y]范围内。 |
注:使用时要加 random.XXX
③ 三角函数
函数 | 解释 |
---|---|
cos(x) | 返回x的弧度的余弦值。 |
acos(x) | 返回x的反余弦弧度值。 |
sin(x) | 返回的x弧度的正弦值。 |
asin(x) | 返回x的反正弦弧度值。 |
tan(x) | 返回x弧度的正切值。 |
atan(x) | 返回x的反正切弧度值。 |
atan2(y, x) | 返回给定的 y/x 的反正切值,以弧度为单位,结果是在 -pi 和 pi 之间 |
hypot(x, y) | 返回欧几里德范数 sqrt(xx + yy)。 |
degrees(x) | 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0 |
radians(x) | 将角度转换为弧度 |
注:使用时要加 math.XXX
④ 常数
常数 | 解释 |
---|---|
pi 数学常量 | pi(圆周率,一般以π来表示) |
e 数学常量 | e,e即自然常数(自然常数) |
2、字符串类型
① 字符串格式
符号 | 解释 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
② 格式化字符串
f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去
name = 'Runoob'
a = f'Hello {name:1d}' # 'Hello Runoob'
a = f'{1+2}' # '3'
w = {'name': 'Runoob', 'url': 'www.runoob.com'}
a = f'{w["name"]}: {w["url"]}' # 'Runoob: www.runoob.com'
格式化字符串的函数 str.format()
print('{0}+{1}={2}'.format(1,2,3))
repr()格式化字符串函数
print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
③ 字符串函数
函数 | 解释 |
---|---|
join(seq) | 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
len(string) | 返回字符串长度 |
split(str=“”, num=string.count(str)) | 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串 |
splitlines([keepends]) | 按照行(‘\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 |
find(str, beg=0, end=len(string)) | 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1 |
rfind(str, beg=0,end=len(string)) | 类似于 find()函数,不过是从右边开始查找 |
index(str, beg=0, end=len(string)) | 跟find()方法一样,只不过如果str不在字符串中会报一个异常。 |
rindex( str, beg=0, end=len(string)) | 类似于 index(),不过是从右边开始 |
count(str, beg= 0,end=len(string)) | 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 |
endswith(suffix, beg=0, end=len(string)) | 检查字符串是否以 suffix 结束,判断 beg 或者 end 指定则检查指定的范围内是否以 suffix 结束,如果是,返回 True,否则返回 False。 |
startswith(substr, beg=0,end=len(string)) | 检查字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。 |
max(str) | 返回字符串 str 中最大的字母。 |
min(str) | 返回字符串 str 中最小的字母。 |
expandtabs(tabsize=8) | 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 |
lower() | 转换字符串中所有大写字符为小写 |
upper() | 转换字符串中的小写字母为大写 |
swapcase() | 将字符串中大写转换为小写,小写转换为大写 |
capitalize() | 将字符串的第一个字符转换为大写 |
lstrip() | 截掉字符串左边的空格或指定字符 |
rstrip() | 删除字符串末尾的空格或指定字符 |
strip([chars]) | 在字符串上执行 lstrip()和 rstrip() |
center(width, fillchar) | 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。 |
zfill (width) | 返回长度为 width 的字符串,原字符串右对齐,前面填充0 |
title() | 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) |
translate(table, deletechars=“”) | 根据 table 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中 |
ljust(width[, fillchar]) | 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格 |
rjust(width,[, fillchar]) | 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串 |
maketrans() | 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 |
bytes.decode(encoding=“utf-8”, errors=“strict”) | 解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。 |
encode(encoding=‘UTF-8’,errors=‘strict’) | 以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常 |
isalnum() | 检查字符串是否由字母和数字组成,即字符串中的所有字符都是字母或数字。如果字符串至少有一个字符,并且所有字符都是字母或数字,则返回 True;否则返回 False。 |
isalpha() | 如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False |
isupper() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
islower() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
isdigit() | 如果字符串只包含数字则返回 True 否则返回 False,只对正整数有效,负数及小数均返回不正确,二者可以通过是否能运行float(x)判断 |
isnumeric() | 如果字符串中只包含数字字符,则返回 True,否则返回 False,包括Unicode 数字,全角数字(双字节),罗马数字,汉字数字,指数,分数。 |
isspace() | 如果字符串中只包含空白,则返回 True,否则返回 False. |
istitle() | 如果字符串是标题化的(所有的单词拼写首字母为大写,且其他字母为小写)则返回 True,否则返回 False |
isdecimal() | 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。 |
注:使用时要加 str.XXX,str是已经定义的某一字符串
3、列表
① 相关函数
函数 | 解释 |
---|---|
list.append(x) | 在列表末尾添加一个元素,相当于 a[len(a):] = [x] |
list.extend(iterable) | 用可迭代对象的元素扩展列表。相当于 a[len(a):] = iterable |
list.insert(i, x) | 在指定位置插入元素。第一个参数是插入元素的索引,因此,a.insert(0, x) 在列表开头插入元素, a.insert(len(a), x) 等同于 a.append(x) |
list.remove(x) | 从列表中删除第一个值为 x 的元素。未找到指定元素时,触发 ValueError 异常 |
list.pop([i]) | 移除列表中给定位置上的条目,并返回该条目。 如果未指定索引号,则 a.pop() 将移除并返回列表中的最后一个条目。 如果列表为空或索引号在列表索引范围之外则会引发 IndexError |
del list[2] | 删除list[2]元素(可以删除多个) |
list.clear() | 删除列表里的所有元素,相当于 del a[:] 。 |
list.index(x[, start[, end]]) | 返回列表中第一个值为 x 的元素的零基索引。未找到指定元素时,触发 ValueError 异常。可选参数 start 和 end 是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是 start 参数 |
list.count(x) | 返回列表中元素 x 出现的次数。 |
list.sort(key=None, reverse=False) | 按照key就地排序列表中的元素,reverse = True 降序, reverse = False 升序(key可以是函数名) |
list.reverse() | 翻转列表中的元素 |
list.copy() | 返回列表的浅拷贝。相当于 a[:] |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
② 用list实现堆栈(“后进先出”):向栈顶添加一个条目,使用 append()。 要从栈顶提取一个条目,使用 pop(),无需显式指定索引
③ 用list实现队列(“先进先出”):向队列添加一个条目,使用 append()。 要从队列提取一个条目,使用 popleft()
④ 列表推导:squares = list(map(lambda x: x**2, range(10)))等价于squares = [x**2 for x in range(10)]
④ 嵌套列表推导:行列转置[[row[i] for row in matrix] for i in range(4)]
4、元组
① 元组推导:a = (x for x in range(1,10))
② 相关函数
函数 | 解释 |
---|---|
del a | 删除元组,只能删除整个元组,不能删除某个元素 |
len(tuple) | 计算元组元素个数 |
max(tuple) | 返回元组中元素最大值。 |
min(tuple) | 返回元组中元素最小值。 |
5、集合
① 集合推导:setnew = {i**2 for i in (1,2,3)}
② 相关函数
函数 | 解释 |
---|---|
add() | 为集合添加元素 |
update() | 给集合添加元素 |
remove() | 移除指定元素 |
discard() | 删除集合中指定的元素,不报错 |
clear() | 移除集合中的所有元素 |
pop() | 随机移除元素 |
copy() | 拷贝一个集合 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在 |
difference() | 返回多个集合的差集 |
intersection() | 返回集合的交集,返回一个新集合 |
intersection_update() | 返回集合的交集,在原始的集合上移除不重叠的元素 |
union() | 返回两个集合的并集 |
symmetric_difference() | 返回两个集合中不重复的元素集合 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False |
issubset() | 判断指定集合是否为该方法参数集合的子集。 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
len() | 计算集合元素个数 |
注:除了len外,其他都需要set.XXX,提前定义set
6、字典
① 修改、增加元素:tinydict[‘Age’] = 8
② 显式删除一个字典用del命令
③ 字典推导:dic = {x: x**2 for x in (2, 4, 6)}
④ 相关函数
函数 | 解释 |
---|---|
len(dict) | 计算字典元素个数,即键的总数。 |
str(dict) | 输出字典,可以打印的字符串表示。 |
type(variable) | 返回输入的变量类型,如果变量是字典就返回字典类型。 |
dict.clear() | 删除字典内所有元素 |
dict.copy() | 返回一个字典的浅复制 |
dict.fromkeys() | 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
dict.get(key, default=None) | 返回指定键的值,如果键不在字典中返回 default 设置的默认值 |
key in dict | 如果键在字典dict里返回true,否则返回false |
dict.items() | 以列表返回一个视图对象key,value |
dict.keys() | 以列表返回所有key |
dict.values() | 以列表返回所有value |
dict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
dict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
pop(key[,default]) | 删除字典 key(键)所对应的值,返回被删除的值 |
popitem() | 返回并删除字典中的最后一对键和值 |
del dict[key] | 删除元素 |
函数
① 定义:def 后跟函数名与括号内的形参列表
② return 语句返回函数的值(可以没有return语句)
③ 匿名函数用lambda定义
1、调用时传入参数
① 默认值参数:调用函数时,可以使用比定义时更少的参数,默认值为列表、字典或类实例等可变对象时,会累积后续调用时传递的参数:
② 关键字参数:kwarg=value 形式调用函数,关键字参数的顺序并不重要,但不能对同一个参数多次赋值
③不定长参数:**name 形式时,接收一个字典, *name 形参接收一个 元组,*name 必须在 **name 前面,单独出现星号 *,则星号 * 后的参数必须用关键字传入
def cheeseshop(kind, *arguments, **keywords):
print("-- Do you have any", kind, "?")
print("-- I'm sorry, we're all out of", kind)
for arg in arguments:
print(arg)
print("-" * 40)
for kw in keywords:
print(kw, ":", keywords[kw])
cheeseshop("Limburger", "It's very runny, sir.",
"It's really very, VERY runny, sir.",
shopkeeper="Michael Palin",
client="John Cleese",
sketch="Cheese Shop Sketch")
# 输出
-- Do you have any Limburger ?
-- I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
shopkeeper : Michael Palin
client : John Cleese
sketch : Cheese Shop Sketch
④ 特殊参数 * 和 / : 详细解释参考这里
仅限位置形参应放在 / (正斜杠)前,/ 用于在逻辑上分割仅限位置形参与其它形参,如果函数定义中没有 /,则表示没有仅限位置形参。
在参数列表中第一个仅限关键字 形参前添加 *,表明必须以关键字参数形式传递该形参
2、装饰器
①装饰器定义如下
def decorator_function(original_function):
def wrapper(*args, **kwargs):
# 这里是在调用原始函数前添加的新功能
before_call_code()
result = original_function(*args, **kwargs)
# 这里是在调用原始函数后添加的新功能
after_call_code()
return result
return wrapper
# 使用装饰器
@decorator_function
def target_function(arg1, arg2):
pass # 原始函数的实现
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(n):
result = func(*args, **kwargs)
return result
return wrapper
return decorator
@repeat(3) #等同于greet = repeat(greet)
def greet(name):
print(f"Hello, {name}!")
greet("Alice")
② 类装饰器:包含 call 方法的类,它接受一个函数作为参数,并返回一个新的函数
class DecoratorClass:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
# 在调用原始函数之前/之后执行的代码
result = self.func(*args, **kwargs)
# 在调用原始函数之后执行的代码
return result
@DecoratorClass
def my_function():
pass
类
1、Class 对象
类对象支持两种操作:属性引用和实例化。
① 属性引用 使用 Python 中所有属性引用所使用的标准语法: obj.name
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
MyClass.i 和 MyClass.f 将分别返回一个整数和一个函数对象,可以通过赋值来更改 MyClass.i 的值
② 类的实例化 x = MyClass(),实例化操作 (“调用”类对象) 会创建一个空对象。 当一个类定义了 init() 方法时,类的实例化会自动为新创建的类实例发起调用 init()
def __init__(self):
self.data = []
在类内引用参数和方法可以使用self.XXX
class Bag:
def __init__(self):
self.data = []
def add(self, x):
self.data.append(x)
def addtwice(self, x):
self.add(x)
self.add(x)
2、继承
① 继承
class DerivedClassName(BaseClassName):
当构造类对象时,如果请求的属性在类中找不到,搜索将转往基类中进行查找。派生类可能会重写其基类的方法。可以简单地直接调用基类方法:即调用 BaseClassName.methodname(self, arguments)
② 内置函数可被用于继承机制:isinstance(obj, type) 来检查一个实例的类型,issubclass((bool, int) 来检查类的继承关系
③ 多重继承
class DerivedClassName(Base1, Base2, Base3):
④ 私有变量:那种仅限从一个对象内部访问的“私有”实例变量在 Python 中并不存在。 但是,带有一个下划线的名称 (例如 _spam) 应该被当作是 API 的非公有部分 (无论它是函数、方法或是数据成员)
错误和异常
1、assert(断言)
用于判断一个表达式,在表达式条件为 false 的时候触发异常。
2、异常处理
try /except
while True:
try:
x = int(input("请输入一个数字: "))
break
except ValueError:
print("您输入的不是数字,请再次尝试输入!")
3、raise
x = 10
if x > 5:
raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
参考
python官方文档
总结文档