Python第二周 学习笔记(2)

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

Python第二周 学习笔记(2)

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

转载于:https://blog.51cto.com/11281400/2093163

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值