1 数据结构和序列
元组tuple
,小括号定义,固定长度,不可变的Python序列对象
在Python的函数中,参数传入以及结果返回都是以元组的形式实现的
列表list
,方括号定义,长度可变,内容可变的Python序列对象
常用的序列函数
enumerate()
示例:for i, value in enumerate(tuple_or_list)
sort()
:对序列或字符串进行排序zip()
:对多个序列进行成对地组合(最终长度取决于最短的输入序列)reversed()
:生成器,从后向前地迭代一个序列
字典dict
(重要),大括号定义,以键值对的形式存储一系列Python对象
keys
和values
是字典的键和值的迭代器方法- 两个字典可以通过
update
进行融合 setdefault
方法可以设置默认值,或者直接使用带默认值的字典格式defaultdict
- 字典的值可以是任意Python对象,但键必须要是”可哈希的“(可以使用
hash
函数来检测一个对象是否是可哈希的/可被作为字典的键,比如列表就是不可以的)
集合set
,无序的不可重复的元素集合,支持常见的数学集合操作(交并补)
通过将列表等序列对象转换为集合,可快速实现去重的效果
常见推导式(Comprehensions):
# 列表推导式
[expr for value in collection if condition]
# 字典推导式
set_comp = {expr for value in collection if condition}
# 集合推导式配合map函数
set(map(len, strings)) # 计算每个字符串的长度
# 嵌套推导式
result = [name for names in all_data for name in names if name.count('e') >= 2]
建议熟练地掌握以上数据结构相关的增删改查、切片、拼接、排序、格式转换等技巧
2 函数
基本结构:
def my_function(x, y, z=1.5):
if z > 1:
return z * (x + y)
else:
return z / (x + y)
- 其中
x
和y
是位置参数,z
是可选参数 - 在一些不需要返回的函数中,
return
可以忽略 return
结果可以为空,也可以是多个值(会被拼接为元组返回)
Python通过命名空间(namespace)限制变量的作用域
- 函数中定义的变量都被分配到局部命名空间中,不可在外部被访问
global
关键字可以在函数内定义全局变量(一般不推荐使用,容易乱)
对于一次性的简单函数,可以使用匿名(lambda)函数:
def apply_to_list(some_list, f):
return [f(x) for x in some_list]
ints = [4, 0, 1, 5, 6]
apply_to_list(ints, lambda x: x * 2)
Python中的许多对象(如列表或字典)都支持迭代,生成器(generator)是构造可迭代对象常用方法:
def squares(n=10):
print('Generating squares from 1 to {0}'.format(n ** 2))
for i in range(1, n + 1):
yield i ** 2 # 将函数中的return替换为yeild,便可创建一个生成器
另一种构造生成器的简洁方法是使用生成器表达式(generator expression):
gen = (x ** 2 for x in range(100))
gen
# <generator object <genexpr> at 0x7fbbd5ab29e8>
Python内置标准库中的itertools模块,包含了很多用于常见算法的生成器
Python捕捉异常的语法:
f = open(path, 'w') # 创建文件对象(只写模式)
try:
write_to_file(f)
except:
print('Failed')
else:
print('Succeeded')
finally:
f.close() # 关闭文件并释放资源
文件处理的常用模式:r
只读模式、w
只写模式(已存在文件会被覆盖)、x
只写模式(存在文件时会失败)、a
追写模式、r+
读写模式、b
声明为二进制文件(可配合其他模式,如wb
,rb
)
文件处理的常用方法:read
读取、readable
判断是否可读、readlines
按行读取、write
写入、writable
判断是否可写、writelines
按行写入、close
关闭文件、flush
清空内部IO缓存并写回磁盘、seek
移动到文件的指定位置、seekable
判断是否可移动、tell
以整数形式返回文件位置、closed
判断是否已关闭、encoding
指定解码格式
注意区分文件的编码格式,对症下药;可通过
sys.getdefaultencoding()
检查默认的编码格式