Python 速查表中文版
本手册是 Python cheat sheet 的中文翻译版。原作者:Arianne Colton and Sean Chen(data.scientist.info@gmail.com)
编译:ucasFL
目录
常规
Python 对大小写敏感
Python 的索引从 0 开始
Python 使用空白符(制表符或空格)来缩进代码,而不是使用花括号
获取帮助
获取主页帮助:
help()获取函数帮助:
help(str.replace)获取模块帮助:
help(re)
模块(库)
Python的模块只是一个简单地以 .py 为后缀的文件。
列出模块内容:
dir(module1)导入模块:
import module调用模块中的函数:
module1.func1()
注:
import语句会创建一个新的命名空间(namespace),并且在该命名空间内执行.py文件中的所有语句。如果你想把模块内容导入到当前命名空间,请使用from module1 import *语句。
数值类类型
查看变量的数据类型:type(variable)
六种经常使用的数据类型
int/long:过大的
int类型会被自动转化为long类型float:64 位,Python 中没有
double类型bool:真或假
str:在 Python 2 中默认以 ASCII 编码,而在 Python 3 中默认以 Unicode 编码
字符串可置于单/双/三引号中
字符串是字符的序列,因此可以像处理其他序列一样处理字符串
特殊字符可通过
\或者前缀r实现:字符串可通过多种方式格式化:
NoneType(None):Python “null”值(
None对象只存在一个实例)None不是一个保留关键字,而是NoneType的一个唯一实例None通常是可选函数参数的默认值:None的常见用法:
datetime:Python内置的
datetime模块提供了datetime、data以及time类型。datetime组合了存储于date和time中的信息
注:
str、bool、int和float同时也是显式类型转换函数。除字符串和元组外,Python 中的绝大多数对象都是可变的。
数据结构
注:所有的“非只读(non-Get)”函数调用,比如下面例子中的
list1.sort(),除非特别声明,都是原地操作(不会创建新的对象)。
元组
元组是 Python 中任何类型的对象的一个一维、固定长度、不可变的序列。
元组应用:
列表
列表是 Python 中任何类型的对象的一个一维、非固定长度、可变(比如内容可以被修改)的序列。
使用 + 连接列表会有比较大的开支,因为这个过程中会创建一个新的列表,然后复制对象。因此,使用
extend()是更明智的选择。
insert和append相比会有更大的开支(时间/空间)。在列表中检查是否包含一个值会比在字典和集合中慢很多,因为前者需要进行线性扫描,而后者是基于哈希表的,所以只需要花费常数时间。
内置的bisect模块
bisect模块对一个排序好的列表进行二分查找或插入
bisect.bisect找到元素在列表中的位置,bisect.insort将元素插入到相应位置。用法:
注:
bisect模块中的函数并不会去检查列表是否排序好,因为这会花费很多时间。所以,对未排序好的列表使用这些函数也不会报错,但可能会返回不正确的结果。
针对序列类型的切片
序列类型包括
str、array、tuple、list等。
用法:
注:
切片结果包含
start索引,但不包含stop索引
start/stop索引可以省略,如果省略,则默认为序列从开始到结束,如list1 == list1[:]。
step 的应用:
字典(哈希表)
如果键不存在,则会出现
KeyError Exception。当键不存在时,如果
get()不提供默认值则会返回None。以相同的顺序返回键列表和值列表,但顺序不是特定的,也就是说极大可能非排序。
有效字典键类型
键必须是不可变的,比如标量类型(
int、float、string)或者元组(元组中的所有对象也必须是不可变的)。这儿涉及的技术术语是“可哈希(hashability)”。可以用函数
hash()来检查一个对象是否是可哈希的,比如hash('This is a string')会返回一个哈希值,而hash([1,2])则会报错(不可哈希)。
集合
一个集合是一些无序且唯一的元素的聚集;
你可以把它看成只有键的字典;
集合操作
并(或):
set1 | set2交(与):
set1 & set2差:
set1 - set2对称差(异或):
set1 ^ set2
函数
Python 的函数参数传递是通过引用传递。
基本形式
注:
关键字参数必须跟在位置参数的后面;
默认情况下,Python 不会“延迟求值”,表达式的值会立刻求出来。
函数调用机制
所有函数均位于模块内部作用域。见“模块”部分。
在调用函数时,参数被打包成一个元组和一个字典,函数接收一个元组
args和一个字典kwargs,然后在函数内部解包。
“函数是对象”的常见用法:
返回值
如果函数直到结束都没有
return语句,则返回None。如果有多个返回值则通过一个元组来实现。
匿名函数(又称 LAMBDA 函数)
什么是匿名函数?
匿名函数是一个只包含一条语句的简单函数。
匿名函数的应用:“柯里化(curring)”,即利用已存在函数的部分参数来派生新的函数。
一些有用的函数(针对数据结构)
Enumerate 返回一个序列
(i, value)元组,i是当前item的索引。应用:创建一个序列中值与其在序列中的位置的字典映射(假设每一个值都是唯一的)。
Sorted 可以从任意序列中返回一个排序好的序列。
应用:
Zip 函数可以把许多列表、元组或其他序列的元素配对起来创建一系列的元组。
zip()可以接收任意数量的序列作为参数,但是产生的元素的数目取决于最短的序列。应用:多个序列同时迭代:
unzip:另一种思考方式是把一些行转化为一些列:
Reversed 将一个序列的元素以逆序迭代。
reversed()会返回一个迭代器,list()使之成为一个列表。
控制流
用于
if-else条件中的操作符:注:Python 中使用
and、or、not来组合条件,而不是使用&&、||、!。for循环的常见用法:pass:无操作语句,在不需要进行任何操作的块中使用。三元表达式,又称简洁的
if-else,基本形式:Python 中没有
switch/case语句,请使用if/elif。
面向对象编程
对象是 Python 中所有类型的根。
万物(数字、字符串、函数、类、模块等)皆为对象,每个对象均有一个“类型(type)”。对象变量是一个指向变量在内存中位置的指针。
所有对象均会被引用计数。
类的基本形式:
有用的交互式工具:
常见字符串操作
异常处理
基本形式:
手动引发异常:
列表、字典以及元组的推导表达式
使代码更加易读易写的语法糖。
列表推导
用一个简练的表达式,通过筛选一个数据集并且转换经过筛选的元素的方式来简明地生成新列表。
基本形式:
等价于
可以省略过滤条件,只留下表达式。
字典推导
基本形式:
集合推导
基本形式:和列表推导一样,不过是用
()而不是[]。
嵌套列表
基本形式:
单元测试
Python自带unittest模块,可供我们编写单元测试。
我们可以编写继承于unittest.TestCase测试类的子类,并在子类中编写具体的测试函数。测试函数命必须以test_开头,否则不会被识别为测试函数,进而不会在运行单元测试时被运行。
另外,unittest.TestCase中还有两个特殊的成员函数,他们分别会在调用每一个测试函数的前后运行。在测试前连接数据库并在测试完成后断开连接是一种常见的使用场景。
测试类编写完毕后,可以通过添加以下代码来将当前文件当成正常的Python脚本使用
Last updated