bytes、bytearray
bytes:
- 不可变字节序列
bytearray:
- 字节数组
- 可变
字符串与bytes
- 字符串是字符组成的有序序列,字符可以使用编码来理解
- bytes是字节组成的有序的不可变序列
- bytearray是字节组成的有序的可变序列
编码与解码
- 字符串按照不同的字符集编码encode返回字节序列bytes
- encode(encoding='utf-8', errors='strict') -> bytes
- 字节序列按照不同的字符集解码decode返回字符串
- bytes.decode(encoding="utf-8", errors="strict") -> str
- bytearray.decode(encoding="utf-8", errors="strict") -> str
bytes定义
- bytes() 空bytes
- bytes(int) 指定字节的bytes,被0填充
- bytes(iterable_of_ints) -> bytes [0,255]的int组成的可迭代对象
- bytes(string, encoding[, errors]) -> bytes 等价于string.encode()
- bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer 从一个字节序列或者buffer复制出
- 一个新的不可变的bytes对象
- 使用b前缀定义
- 只允许基本ASCII使用字符形式b'abc9'
- 使用16进制表示b"\x41\x61"
bytes操作
-
bytes.fromhex(string)
-
string必须是2个字符的16进制的形式,'6162 6a 6b',空格将被忽略
-
hex()
-
返回16进制表示的字符串
-
索引
-
b'abcdef'[2] 返回该字节对应的数,int类型
bytearray定义
- bytearray() 空bytearray
- bytearray(int) 指定字节的bytearray,被0填充
- bytearray(iterable_of_ints) -> bytearray [0,255]的int组成的可迭代对象
- bytearray(string, encoding[, errors]) -> bytearray 近似string.encode(),不过返回可变对象
- bytearray(bytes_or_buffer) 从一个字节序列或者buffer复制出一个新的可变的bytearray对象
- 注意,b前缀定义的类型是bytes类型
bytearray操作
- 和bytes类型的方法相同
- bytearray(b'abcdef').replace(b'f',b'k')
- bytearray(b'abc').find(b'b')
- 类方法 bytearray.fromhex(string)
- string必须是2个字符的16进制的形式,'6162 6a 6b',空格将被忽略
- bytearray.fromhex('6162 09 6a 6b00')
- hex()
- 返回16进制表示的字符串
- bytearray('abc'.encode()).hex()
- 索引
- bytearray(b'abcdef')[2] 返回该字节对应的数,int类型
- append(int) 尾部追加一个元素
- insert(index, int) 在指定索引位置插入元素
- extend(iterable_of_ints) 将一个可迭代的整数集合追加到当前bytearray
- pop(index=-1) 从指定索引上移除元素,默认从尾部移除
- remove(value) 找到第一个value移除,找不到抛ValueError异常
- 注意:上述方法若需要使用int类型,值在[0, 255]
- clear() 清空bytearray
- reverse() 翻转bytearray,就地修改
切片操作
- 可迭代 for ... in
- len()可以获取长度
- 通过下标可以访问
- 可以切片
- 如:列表、元组、字符串、bytes、bytearray、set、dict
切片
-
通过索引区间访问线性结构的一段数据
-
sequence[start:stop] 表示返回[start, stop)区间的子序列
-
支持负索引
-
start为0,可以省略
-
stop为末尾,可以省略
-
超过上界(右边界),就取到末尾;超过下界(左边界),取到开头
-
start一定要在stop的左边
-
[:] 表示从头至尾,全部元素被取出,等效于copy()方法
步长切片
- [start:stop:step]
- step为步长,可以正、负整数,默认是1
- step要和start:stop同向,否则返回空序列
IPython使用
帮助
-
?
-
ipython自带操作文档
-
help(name)
-
查询指定名称的帮助
-
obj?
-
列出obj对象的详细信息
-
obj??
-
列出更加详细的信息
特殊变量
-
_
-
前一次输出
-
"__"
-
倒数第二次输出
-
"___"
-
倒数第三次输出
-
_dh
-
路径历史
-
_oh
-
输出历史
shell命令
- !command
- 执行shell命令
魔术方法
-
使用%百分号开头的,IPython内置的特殊方法
-
%magic 格式
- % 开头是line magic
-
%% 开头是 cell magic,notebook的cell
-
%alias 定义一个系统命令的别名
-
%timeit statement
-
-n 一个循环loop执行语句多少次
-
-r 循环执行多少次loop,取最好的结果
-
%%timeit setup_code code..
-
%cd 改变当前工作目录,cd可以认为是%cd的链接。路径历史在_dh中查看
-
%pwd、pwd 显示当前工作目录
-
%ls 、ls 返回文件列表
-
%%js、%%javascript 在cell中运行js脚本
-
%%js alert('a'+1)
封装和解构
封装
- 将多个值使用逗号分割,组合在一起
- 本质上,返回一个元组,只是省掉了小括号
解构
-
把线性结构的元素解开,并顺序的赋给其它变量
-
左边接纳的变量数要和右边解开的元素个数一致
-
使用 *变量名 接收,但不能单独使用
-
被 *变量名 收集后组成一个列表
-
如果不关心一个变量,就可以定义改变量的名字为_
-
这是一个惯例,是一个不成文的约定,不是标准
-
_是一个合法的标识符,也可以作为一个有效的变量使用,但是定义成下划线就是希望不要被使用,除非你明确的知道这个数据需要使用
总结
- _ 这个变量本身无任何语义,没有任何可读性,所以不是用来给人使用的
- Python中很多库,都使用这个变量,使用十分广泛。请不要在不明确变量作用域的情况下,使用 _ 导致和库中_ 冲突
set
- 可变的、无序的、不重复的元素的集合
初始化
- set() -> new empty set object
- set(iterable) -> new set object
set的元素
- set的元素要求必须可以hash
- 目前学过的不可hash的类型有list、set
- 元素不可以索引
- set可以迭代
set增加
-
add(elem)
-
增加一个元素到set中
-
如果元素存在,什么都不做
-
update(*others)
-
合并其他元素到set集合中来
-
参数others必须是可迭代对象
-
就地修改
set删除
-
remove(elem)
-
从set中移除一个元素
-
元素不存在,抛出KeyError异常
-
discard(elem)
-
从set中移除一个元素
-
元素不存在,什么都不做
-
pop() -> item
-
移除并返回任意的元素
-
空集返回KeyError异常
-
clear()
-
移除所有元素
成员运算符
- in 和 not in 判断元素是否在set中
set和线性结构
- set、dict等结构,内部使用hash值作为key,时间复杂度可以做到O(1),查询时间和数据规模无关
- 可hash
- 数值型int、float、complex
- 布尔型True、False
- 字符串string、bytes
- tuple
- None
- 以上都是不可变类型,成为可哈希类型,hashable
- set的元素必须是可hash的
集合运算
并集
-
union(*others)
-
返回和多个集合合并后的新的集合
-
| 运算符重载
-
等同union
-
update(*others)
-
和多个集合合并,就地修改
-
|=
-
等同update
交集
-
intersection(*others)
-
返回和多个集合的交集
-
&
-
等同intersection
-
intersection_update(*others)
-
获取和多个集合的交集,并就地修改
-
&=
-
等同intersection_update
差集
-
difference(*others)
-
返回和多个集合的差集
-
_
-
等同difference
-
difference_update(*others)
-
获取和多个集合的差集并就地修改
-
-=
-
等同difference_update
对称差集
-
集合A和B,由所有不属于A和B的交集元素组成的集合,记作(A-B)∪(B-A)
-
symmetric_differece(other)
-
返回和另一个集合的差集
-
^
-
等同symmetric_differece
-
symmetric_differece_update(other)
-
获取和另一个集合的差集并就地修改
-
^=
-
等同symmetric_differece_update
-
issubset(other)、<=
-
判断当前集合是否是另一个集合的子集
-
set1 < set2
-
判断set1是否是set2的真子集
-
issuperset(other)、>=
-
判断当前集合是否是other的超集
-
set1 > set2
-
判断set1是否是set的真超集
-
isdisjoint(other)
-
当前集合和另一个集合没有交集
-
没有交集,返回True