Python学习笔记
Python BIF与关键字
type()
>>> type(3.1e-10)
<class 'float'>
id()
查看变量的地址。
isinstance()
>>> isinstance(3.14, int)
False
assert
当条件为假时,程序自动崩溃,并抛出AssertionError的异常。
>>> assert 3 > 4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
序列相关方法
len()
求序列(列表/元组/字符串)的长度。
max()
/min()
求序列或参数集合的最大值/最小值,但必须保证数据类型统一。
sum()
格式:sum(序列, <可选参数>)
效果:求序列的和,若有可选参数,则再加上该参数的值。
sorted()
排序。与list.sort()
作用相同。
enumerate()
string = "i love cuc"
print(list(enumerate(string)))
结果为:[(0, 'i'), (1, ' '), (2, 'l'), (3, 'o'), (4, 'v'), (5, 'e'), (6, ' '), (7, 'c'), (8, 'u'), (9, 'c')]
zip()
a = [1, 30, 15, 17, 28]
b = [2, 76, 61]
print(list(zip(a, b)))
结果为:[(1, 2), (30, 76), (15, 61)]
列表相关方法与关键字
访问列表元素
访问单个元素,如:member[0]
列表切片(访问多个元素),如:
member[2:5]
(提取第2、3、4个元素)member[:3]
(提取起始至第2个元素)member[1:]
(提取第1个至末尾的元素)member[:]
(获取列表的拷贝,并可用于member2 = member[:]
)
添加元素
list.append()
在列表的末尾追加一个新元素。
member = [1, 2, 3.14, [4, 0.1], 'abc']
member.append('defgh')
list.extend()
在列表的末尾追加一个列表
member.extend([0, 1])
结果为:[1, 2, 3.14, [4, 0.1], 'abc', 'defgh', 0, 1]
list.insert()
如,在列表的第0个位置添加一个元素(注意,如果第二个参数是列表,则将这个列表整体作为元素):
member.insert(0, ['new1', 'new2'])
结果为:[['new1', 'new2'], 1, 2, 3.14, [4, 0.1], 'abc', 'defgh', 0, 1]
删除元素
list.remove()
格式:list.remove(元素)
del
格式:del 列表名[索引]
(删除一个元素)或del 列表名
(删除整个列表)
list.pop()
格式 | 效果 | |
---|---|---|
无参数 | <返回值> = 列表名.pop() | 删除列表末尾元素,并将该元素返回 |
有参数 | <返回值> = 列表名.pop(列表索引值) | 删除列表指定索引的元素,并将该元素返回 |
其他常用功能
list.index()
list1 = [1, 2, 3]
list1 *= 3 # 复制三次
print(list1.index(2)) # 求2在列表中第一次出现时的索引号
print(list1.index(2, 2, 5)) # 求2在列表的2~5(不含5)个元素的范围内第一次出现时的索引号
list.reverse()
无参数,用于将列表翻转
list.sort()
将列表排序。无参数时表示升序排列,list.sort(reverse = True)
表示降序排列。
字典相关方法
创建字典
直接赋值
dict1 = {1: 'a', 'agwege':3, 2.123: 3.12}
dict2 = {"Apple": "USA", "Xiaomi": "CHN", "Samsung": "KOR"}
dict()
dict2 = dict(Apple = "USA", Xiaomi = "CHN", Samsung = "KOR")
注意,赋值号左侧的命名需要符合变量的命名规范,如dict(1 = 'a', 2 = 'b')
会报错。
dict.fromkeys()
dict3 = {}
dict3 = dict3.fromkeys((1, 2, 3), "number")
print(dict3) # 结果:{1: 'number', 2: 'number', 3: 'number'}
dict3 = dict3.fromkeys((1, 2, 3), ("one", "two", "three"))
print(dict3) # 结果:{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
注意,只会创建一个新的字典,因此不能用这个函数来修改字典的值。
访问字典
直接通过索引访问
在字典中,访问不存在的键值会直接创建新的词条:
dict2["SONY"] = "JPN"
print(dict2) # 结果:{'Apple': 'USA', 'Xiaomi': 'CHN', 'Samsung': 'KOR', 'SONY': 'JPN'}
dict.keys()
访问键值。(注意,该函数无实参。)
for eachKey in dict3.keys():
print(eachKey) # 结果:1↩︎2↩︎3↩︎
dict.values()
与keys()
同理。
dict.items()
于上同理。
for eachItem in dict3.items():
print(eachItem)
# 结果:
# (1, 'number')
# (2, 'number')
# (3, 'number')
dict.get()
返回指定键值对应的值,如果键不在字典中返回默认值None或设置的默认值。
print(dict2.get("Xiaomi")) # 结果:CHN
print(dict2.get("OPPO")) # 结果:None(但并没有在字典中创建这一项)
print(dict2.get("OPPO", "Error!")) # 结果:Error!
dict.setdefault()
与dict.get()
类似,但如果实参在字典中不存在,则添加该项。
a = {1: 'a', 2: 'b', 3: 'c'}
print(a.setdefault(2)) # 结果:b
print(a.setdefault(4)) # 结果:None
print(a) # 结果:{1: 'a', 2: 'b', 3: 'c', 4: None}
print(a.setdefault(5, 'e')) # 结果:e
print(a) # 结果:{1: 'a', 2: 'b', 3: 'c', 4: None, 5: 'e'}
dict.update()
b = {10: 'j'}
a.update(b)
print(a) # 结果:{1: 'a', 2: 'b', 3: 'c', 4: None, 5: 'e', 10: 'j'}
dict.copy()
浅拷贝。
dict_b = dict_a.copy() # 浅拷贝
dict_c = dict_a # 深拷贝(二者地址相同)
删除元素
dict.clear()
无返回值,直接清空字典(注意避免使用dict = {}
)
dict.pop()
与dict.popitem()
dict.pop(key)
:给定键,返回(弹出)对应的值,同时字典中删除该项。dict.popitem()
:无实参,返回(弹出)一个项,同时字典中删除该项。
集合相关方法
创建集合
创建集合时,均会自动去掉重复元素。
-
直接创建:
num = {4, 1, 4, 5, 4, 2, 2, 3}
-
通过工厂函数
set()
:set1 = set([1, 3, 2, 0, 2, 3])
-
通过
frozenset()
创建不可变的集合(不可通过set.add()
等改变集合内容):num2 = frozenset([1, 2, 3, 4, 5, 4, 3, 2, 1]) print(num2) # 结果:frozenset({1, 2, 3, 4, 5})
访问集合元素
- 使用
for
读出 - 通过
in
和not in
判断元素是否在集合中
添加与删除元素
set.add()
num = {4, 1, 4, 5, 4, 2, 2, 3}
num.add(9)
print(num) # 结果:{1, 2, 3, 4, 5, 9}
set.remove()
num.remove(3)
print(num) # 结果:{1, 2, 4, 5, 9}
文件IO
文件打开与关闭
open()
-
常用格式:
fileObject = open(file, mode = 'r')
完整格式:
fileObject = open(file, mode = 'r', buffering = -1, encoding = None, errors = None, newline = None, closefd = True, opener = None)
-
参数:
-
file
:文件名 -
mode
:打开模式mode
效果 'r'
只读打开(默认) 'w'
若不存在文件则创建新文件,若已存在则覆盖 'x'
若文件已存在,则引发异常 'a'
追加写入 'b'
二进制模式(与 t
模式相对)'t'
文本模式(默认) '+'
可读可写模式(可添加到其他模式中使用) 'U'
通用换行符支持 即:
模式 r r+ w w+ a a+ 读 ✅ ✅ ✅ ✅ 写 ✅ ✅ ✅ ✅ ✅ 创建 ✅ ✅ ✅ ✅ 覆盖 ✅ ✅ 指针在开始 ✅ ✅ ✅ ✅ 指针在结尾 ✅ ✅
-
-
返回值:文件对象
fileObject.close()
- 参数:无
- 返回值:无
with
关键字
使用with
关键字处理文件对象是一种更加方便的方式。在结束后, 它会自动关闭文件:
with open('卢本伟语录.txt', 'r', encoding = 'gb18030') as fo:
for eachLine in fo:
print(eachLine)
文件读取
fileObject.read()
- 格式:
fileObject.read([size = -1])
- 输入参数:要读取的字符数(默认为-1,表示读取整个文件)
- 返回值:从文件中读取的字符
f1 = open('/Users/s.z.zheng/Documents/课外学习/Python/test/卢本伟语录.txt', 'r', encoding = 'gb18030')
print('文件的前11个字符:%s' % f1.read(11)) # 读取11个字符并打印
fileObject.readline()
- 格式:
fileObject.readline([size = -1])
文件写入
注意,需要保证mode
为w
或a
。
fileObject.write()
-
格式:
fileObject.write(str)
-
输入参数:要写入的字符串
-
返回值:写入的字符数
f2 = open('file_test.txt', 'w')
f2.write('卢本伟牛逼!')
f2.write('abc123')
f2.close()
fileObject.writelines()
-
功能:用于向文件中写入一序列的字符串
-
格式:
fileObject.writelines(sequence)
-
输入参数:要写入文件的字符串序列(列表/元组/集合等)
-
返回值:无
f2 = open('file_test.txt', 'w')
seq2 = ('Aa\n', 'Bb\n', 'Cc')
f2.writelines(seq2)
文件指针相关方法
fileObject.seek()
- 功能:用于移动文件读取指针到指定位置(经常用于定位到文件起始位置:
fileObject.seek(0, 0)
) - 格式:
fileObject.seek(offset[, whence = 0])
- 输入参数:
offset
:开始的偏移量,也就是代表需要移动偏移的字节数whence
:(默认值为 0)表示要从哪个位置开始偏移;0代表从文件开头开始偏移,1代表从当前位置开始偏移,2代表从文件末尾偏移。
- 返回值:若操作成功,则返回新的文件位置;若操作失败,则返回 -1。
fileObject.tell()
- 功能:返回文件指针的位置
- 格式:
fileObject.tell()
- 输入参数:无
- 返回值:文件当前位置
pickle模块
可实现基本的数据序列化(将程序中运行的对象信息保存到文件中永久存储)和反序列化(从文件中创建上一次程序保存的对象)。
pickle.dump()
import pickle
my_list = [123, '阿森纳', ('a', 'bc')]
# 写
pickle_fo = open('my_list.pkl', 'wb') # 必须为wb
pickle.dump(my_list, pickle_fo)
pickle_fo.close()
pickle.load()
# 读
pickle_fo = open('my_list.pkl', 'rb')
my_list2 = pickle.load(pickle_fo)
print(my_list2)
异常处理
Python标准异常
参见:https://www.runoob.com/python/python-exceptions.html。
异常处理
try:
# 代码
except 标准异常或标准异常元组 [as 存储异常提示的变量]:
# 发生异常时执行的代码
else:
# 未发生异常时执行的代码]
finally:
# 无条件执行的代码
说明:
- 可将
存储异常提示的变量
再代码发生异常时输出:print('ERROR!', 存储异常提示的变量)
; except
可多组连用,使try
部分任一在except
中的异常都可以被捕获;- 在
try
部分,如果某一行代码发生了异常,try
部分的其余代码都不会被执行(异常处理模块之外的其余语句还会正常运行);并且也只会捕获到此行代码的异常(若发生的异常不在except
之列则任何异常都不会被捕获); - 不论
try
部分有无异常,finally
部分都会被无条件执行