Python 速查表中文版

目录

常规

  • 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)

六种经常使用的数据类型

  1. int/long:过大的 int 类型会被自动转化为 long 类型

  2. float:64 位,Python 中没有 double 类型

  3. bool:真或假

  4. str:在 Python 2 中默认以 ASCII 编码,而在 Python 3 中默认以 Unicode 编码

    • 字符串可置于单/双/三引号中

    • 字符串是字符的序列,因此可以像处理其他序列一样处理字符串

    • 特殊字符可通过 \ 或者前缀 r 实现:

    • 字符串可通过多种方式格式化:

  5. NoneType(None):Python “null”值(None对象存在一个实例)

    • None不是一个保留关键字,而是NoneType的一个唯一实例

    • None通常是可选函数参数的默认值:

    • None的常见用法:

  6. datetime:Python内置的datetime模块提供了datetimedata以及time类型。

    • datetime组合了存储于datetime中的信息

  • strboolintfloat同时也是显式类型转换函数。

  • 除字符串和元组外,Python 中的绝大多数对象都是可变的。

数据结构

:所有的“非只读(non-Get)”函数调用,比如下面例子中的list1.sort(),除非特别声明,都是原地操作(不会创建新的对象)。

元组

元组是 Python 中任何类型的对象的一个一维、固定长度、不可变的序列。

元组应用

列表

列表是 Python 中任何类型的对象的一个一维、非固定长度、可变(比如内容可以被修改)的序列。

  • 使用 + 连接列表会有比较大的开支,因为这个过程中会创建一个新的列表,然后复制对象。因此,使用extend()是更明智的选择。

  • insertappend相比会有更大的开支(时间/空间)。

  • 在列表中检查是否包含一个值会比在字典和集合中慢很多,因为前者需要进行线性扫描,而后者是基于哈希表的,所以只需要花费常数时间。

内置的bisect模块

  • 对一个排序好的列表进行二分查找或插入

  • bisect.bisect找到元素在列表中的位置,bisect.insort将元素插入到相应位置。

  • 用法:

bisect 模块中的函数并不会去检查列表是否排序好,因为这会花费很多时间。所以,对未排序好的列表使用这些函数也不会报错,但可能会返回不正确的结果。

针对序列类型的切片

序列类型包括strarraytuplelist等。

用法:

  • 切片结果包含 start 索引,但不包含 stop 索引

  • start/stop 索引可以省略,如果省略,则默认为序列从开始到结束,如 list1 == list1[:]

step 的应用:

字典(哈希表)

  • 如果键不存在,则会出现 KeyError Exception

  • 当键不存在时,如果 get()不提供默认值则会返回 None

  • 以相同的顺序返回键列表和值列表,但顺序不是特定的,也就是说极大可能非排序。

有效字典键类型

  • 键必须是不可变的,比如标量类型(intfloatstring)或者元组(元组中的所有对象也必须是不可变的)。

  • 这儿涉及的技术术语是“可哈希(hashability)”。可以用函数hash()来检查一个对象是否是可哈希的,比如 hash('This is a string')会返回一个哈希值,而hash([1,2])则会报错(不可哈希)。

集合

  • 一个集合是一些无序且唯一的元素的聚集;

  • 你可以把它看成只有键的字典;

  • 集合操作

    • 并(或):set1 | set2

    • 交(与):set1 & set2

    • 差:set1 - set2

    • 对称差(异或):set1 ^ set2

函数

Python 的函数参数传递是通过引用传递

  • 基本形式

    • 关键字参数必须跟在位置参数的后面;

    • 默认情况下,Python 不会“延迟求值”,表达式的值会立刻求出来。

  • 函数调用机制

    1. 所有函数均位于模块内部作用域。见“模块”部分。

    2. 在调用函数时,参数被打包成一个元组和一个字典,函数接收一个元组args和一个字典kwargs,然后在函数内部解包。

  • “函数是对象”的常见用法:

返回值

  • 如果函数直到结束都没有return语句,则返回None

  • 如果有多个返回值则通过一个元组来实现。

匿名函数(又称 LAMBDA 函数)

  • 什么是匿名函数?

    匿名函数是一个只包含一条语句的简单函数。

  • 匿名函数的应用:“柯里化(curring)”,即利用已存在函数的部分参数来派生新的函数。

一些有用的函数(针对数据结构)

  1. Enumerate 返回一个序列(i, value)元组,i 是当前 item 的索引。

    • 应用:创建一个序列中值与其在序列中的位置的字典映射(假设每一个值都是唯一的)。

  2. Sorted 可以从任意序列中返回一个排序好的序列。

    • 应用:

  3. Zip 函数可以把许多列表、元组或其他序列的元素配对起来创建一系列的元组。

    • zip()可以接收任意数量的序列作为参数,但是产生的元素的数目取决于最短的序列。

    • 应用:多个序列同时迭代:

    • unzip:另一种思考方式是把一些行转化为一些列:

  4. Reversed 将一个序列的元素以逆序迭代。

    reversed() 会返回一个迭代器,list() 使之成为一个列表。

控制流

  1. 用于 if-else 条件中的操作符:

    :Python 中使用 andornot 来组合条件,而不是使用 &&||!

  2. for循环的常见用法:

  3. pass:无操作语句,在不需要进行任何操作的块中使用。

  4. 三元表达式,又称简洁的 if-else,基本形式:

  5. Python 中没有 switch/case 语句,请使用 if/elif

面向对象编程

  1. 对象是 Python 中所有类型的根。

  2. 万物(数字、字符串、函数、类、模块等)皆为对象,每个对象均有一个“类型(type)”。对象变量是一个指向变量在内存中位置的指针。

  3. 所有对象均会被引用计数

  4. 类的基本形式:

  5. 有用的交互式工具:

常见字符串操作

异常处理

  1. 基本形式:

  2. 手动引发异常:

列表、字典以及元组的推导表达式

使代码更加易读易写的语法糖。

  1. 列表推导

    • 用一个简练的表达式,通过筛选一个数据集并且转换经过筛选的元素的方式来简明地生成新列表。

    • 基本形式:

      等价于

      可以省略过滤条件,只留下表达式。

  2. 字典推导

    • 基本形式:

  3. 集合推导

    • 基本形式:和列表推导一样,不过是用 () 而不是 []

  4. 嵌套列表

    • 基本形式:

单元测试

Python自带unittest模块,可供我们编写单元测试。

我们可以编写继承于unittest.TestCase测试类的子类,并在子类中编写具体的测试函数。测试函数命必须以test_开头,否则不会被识别为测试函数,进而不会在运行单元测试时被运行。

另外,unittest.TestCase中还有两个特殊的成员函数,他们分别会在调用每一个测试函数的前后运行。在测试前连接数据库并在测试完成后断开连接是一种常见的使用场景。

测试类编写完毕后,可以通过添加以下代码来将当前文件当成正常的Python脚本使用

Last updated