Python要点复习
1. 数据类型概览
Number
/String
/List
/Tuple
/Set
/Dictionary
- 是否可变:
- 不可变数据类型:
Number
/String
/Tuple
- 可变数据类型:
List
/Set
/Dictionary
- 不可变数据类型:
- 数字类型
int
整数(只有一种整数类型)bool
类型:True
/False
float
浮点数complex
复数
2. 运算符
- 位运算符:
&
|
~
^
- 逻辑运算符:
and
or
not
- 成员运算符:
in
:如果在指定的序列中找到值则返回True
,否则返回false
not in
:语义与in
相反
- 身份运算符:
is
:判断两个变量是否引用自同一个对象。x is y
,如果x
和y
引用的是一个相同对象,则返回True
,否则返回False
is not
:语义相反is
与==
的区别:is
判断两个变量是否引用同一个对象,==
判断两个变量的值是否相等
- 删除运算符:
del
语句删除对对象的引用
3. 字符串
- 单引号
'
和双引号"
效果完全相同 - 没有单独的字符类型,字符就是长度为1的字符串
- 字符串是不可变常量
- 字符串可以使用
+
串联在一起,用*
运算符重复 - 字符串截取(切片)的语法格式
[begin : end]
(前闭后开区间) - 字符串的索引,从前往后数从0开始递增,从后往前数从-1开始递减
4. 列表
- 列表使用方括号
[]
,元素间使用逗号,
分隔 - 列表中的元素可以具有不同的数据类型
- 列表属于可变数据类型,列表中的元素是可以更改的
- 列表可以使用
+
串联在一起,用*
运算符重复 - 列表截取(切片)的语法格式
[begin : end]
(前闭后开区间) - 列表的索引,从前往后数从0开始递增,从后往前数从-1开始递减
- 重要API:
list.append(obj)
:在列表末尾添加新元素list.count(obj)
:统计obj
在列表中出现过的次数list.extend(seq)
:在列表中一次性追加另一个序列seq
中的所有值list.index(obj)
:返回元素obj
在列表中第一次出现的索引值list.insert(idx, obj)
:将对象插入到列表中,位置为idx
,该位置原有的元素向后移动list.pop(index=-1)
:移除列表中指定位置的元素(默认为最后一个)并返回元素值list.reverse()
:反转列表list.sort(cmp=None, key=None, reverse=False)
:对列表排序list.clear()
:清空列表list.copy()
:复制列表
5. 元组tuple
- 元组使用小括号
()
,元素间使用逗号,
分隔 - 元组中的元素可以具有不同的数据类型
- 元组的元素是不可更改的
- 单个元素不允许删除或修改,只能删除整个元组
- 特殊语法:
- 当元组中只有一个元素时,要在该元素后添加逗号
,
tup = (50, )
- 当元组中只有一个元素时,要在该元素后添加逗号
- 元组与字符串类似,下标索引从0开始,可以进行截取,组合等
6. 字典
- 字典的键值使用冒号
:
分隔,键值对之间使用逗号,
分隔,字典包括在花括号{}
中 - 键必须是唯一的,不允许存在重复的键
- 键必须是不可变类型,如字符串、数字或元组等
- 向字典增添新的键值对,或者修改现有的值的方法与C++语言类似
- 重要API:
dict.clear()
:删除字典内的所有元素dict.copy()
:返回字典的浅复制dict.get(key, default=None)
:返回指定键的值,如果键不在字典中则返回default
key in dict
:判断键key
是否在字典中dict.items()
:返回列表形式的(key, value)
元组数组dict.keys()
:返回字典中键的迭代器dict.values()
:返回字典中值的迭代器dict.update(dict2)
:将另一个字典中的键-值对更新到字典中dict.pop(key, default=None)
:删除字典中key
对应的键值对,返回对应的值;如果键不存在,则返回传入的default
值
7. 集合
- 集合中的元素不允许重复,而且是无序的
- 集合使用花括号
{}
,元素间使用逗号,
分隔- 创建空集合时必须使用
set()
,因为空花括号{ }
表示空字典
- 创建空集合时必须使用
- 重要API:
set.add(obj)
:向集合中添加元素,如果元素已经存在,则不做任何操作set.clear()
:清空集合set.remove(obj)
:删除集合中的某个元素。如果该元素不存在,将会报错set.discard(obj)
:删除集合中的某个元素;如果元素不存在,不做任何处理set.copy()
:返回集合的浅拷贝set.update(set1)
:将另外一个集合中的元素全部添加到集合中set.isdisjoint(set1)
:判断两个集合中是否包含相等的元素,如果没有,则返回True
- 此外,还有集合的交、并、补、差等操作,用到时再查表
8. 迭代器和生成器
- 迭代器:
- 迭代器的基本方法
iter()
和next()
- 迭代器的基本方法
- 生成器:使用了yield的函数称为生成器(generator)
- 生成器是返回迭代器的函数,只能用于迭代操作
- 调用生成器,返回的是一个迭代器对象
- 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行
import sys
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
9. 函数
- Python函数的参数传递:
- 不可变类型:类似于C++的值传递,如整数、字符串、元组。如
func(a)
,传递的只是a
的值,没有影响a
对象本身。比如在func(a)
内部修改a
的值,只是修改另一个复制的对象,不会影响a
本身 - 可变类型:类似于C++的引用传递,如列表、字典、集合等。
- 不可变类型:类似于C++的值传递,如整数、字符串、元组。如
- lambda表达式创建匿名函数:
- lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数
- 语法:
lambda arg1, arg2,... : expression
sum = lambda arg1, arg2: arg1 + arg2 print ("相加后的值为 : ", sum(10, 20)) print ("相加后的值为 : ", sum(20, 20))
10. 推导式:从序列创建序列
for
之后跟一个表达式,然后有零到多个for
或if
子句。返回结果是一个根据表达从其后的for
和if
上下文环境中生成出来的序列- 如
vec = [2, 4, 6]; [3*x for x in vec if x > 3]
将生成列表[12, 18]
11. 面向对象
- Python中类的构造器函数是
__init__(...)
- 在子类构造器中调用父类构造器方法:
父类名.__init__(self, arg1, arg2,...)
- 在子类构造器中调用父类构造器方法:
- 类的方法的第一个参数必须是
self
,代表调用该方法的类的实例 - 类的私有属性和私有方法:使用两个下划线
__
开头,如__attrs
和__methods