容器数据类型特性总结
- 列表、元素和字典字面量,可以在不使用续行符的情况下,写在多行上,最后一个元素后可加逗号,但空元素后不能有逗号
- 所有对象都有引用计数
- 指定新名称或放入新容器中时,会导致引用计数增加,当引用计数为0时,垃圾回收器会回收该对象
- 使用del()删除对象的引用时,会减少对象的引用计数
- 使用sys模块的sys.getrefcount()方法可查看引用计数
- 列表和字典都支持两种类型的复制操作:浅复制和深复制
- 浅复制会创建一个新对象,对象中存储的是指向原对象的引用,原对象改变,新对象也改变,如l2 = l1
- 深复制会创建一个新对象,并递归复制原对象中每个元素,原对象改变,新对象不变
- 深复制可使用copy模块中的deepcopy()实现
- Python中的所有对象都是“第一类”,这意味着使用标识符命名的所有对象都有相同状态,于是,能够命名的所有对象都可以直接当数据进行处理
- 所有序列都支持迭代
- 所有序列都支持的操作和方法:
s[i]
s[i:j]
s[i:j:stride]
len(s)
min(s)
max(s)
sum(s)
all(s)
any(s)
s1 + s2 : 连接
s1 * N : 重复
obj in s1 :成员关系判断
obj not in s1 - 可变序列的操作:
元素赋值
—–s1[index] = value
切片赋值
—–s1[i:j] = t
删除指定元素
—–del s1[index]
删除切片
—–del s1[i:j]
删除扩展切片
—–del s1[i:j:stride]
Python的表达式和语句
表达式 :
1个或多个操作数,0个或多个操作符组成的序列
语句 :
- 变量声明语句
- 赋值语句
- 调用语句
- 控制语句
- 循环
- 条件判断
Python中的常用的表达式操作符 :
算术运算
x + y , x - y
x * y , x / y , x // y , x % y
逻辑运算
x or y
x and y
not x
成员关系运算
x in y
x not in y
对象实例测试
x is y
x not is y
比较运算
x < y
x > y
x <= y
x >= y
x == y
x != y
按位运算
x | y
x & y
x ^ y
x << y
x >> y
一元运算
-x
+x
~x
幂运算
x ** y
索引和分片
x[i]
x[i:j]
x[i:j:stride]
调用
x(...)
取属性
x.attribute
元组: (...)
序列: [...]
字典: {...}
三元选择表达式
x if y else z
匿名函数
lambda args: expression
生成器函数发送协议
yield x
运算优先级 :
(...),[...],{...}
s[i],s[i:j]
s.attribute
s(...)
+x , -x , ~x
x ** y
* , / , // , %
+ , -
<< , >>
&
^
|
< , <= , > , >= , == , !=
is , not is
in , not in
not
and
or
lambda
常用语句 :
赋值语句
调用语句
print:打印对象
if/elif/else : 条件判断
for/else: 序列迭代
while/else : 普通循环
pass: 占位符
break
continue
def
return
yield
global : 命名空间
raise : 触发异常
import : 模块导入
from : 模块属性访问
class : 类
try/except/finally : 捕捉异常
del : 删除引用
assert : 调试检查
with/as : 环境管理器
赋值语句 :
变量名引用前必须先赋值
隐性赋值:
import, from, def, class, for, 函数参数
元组和列表支持分解赋值:
当赋值符号(=)的左侧为元组或列表时,Python会按照位置把右边的对象和左边的目标自左而右逐一进行配对
个数不同时,会触发异常,此时可以切片的方式进行
多重目标赋值:
num1 = num2 = num3 = 44
增强赋值:
+=, -=, *=, /=, //=, %=
增强赋值执行效率很高,建议使用