1. array数组

array模块定义了一个序列数据结构,看起来与list很相似,只不过所有成员都必须是相同的基本类型。支持的类型包括所有数值类型或其他固定大小的基本类型(如字节)。

代码 类型 最小大小(字节)
b int 1
B int 1
h signed short 2
H unsigned short 2
i signed int 2
I unsigned int 2
l signed long 4
L unsigned long 4
q signed long long 8
Q unsigned long long 8
f float 4
d double float 8

1.1 初始化

array被实例化时可以提供一个参数来描述允许哪种数据类型,还可以有一个存储在数组中的初识数据序列。

import array
import binascii s = b'This is the array.'
a = array.array('b', s) print('As byte string:', s)
print('As array :', a)
print('As hex :', binascii.hexlify(a))

在这个例子中,数组被配置为包含一个字节序列,并用一个简单的字符串初始化。

1.2 处理数组

与其他Python序列相似,可以采用同样的方式扩展和处理array。

import array
import pprint a = array.array('i', range(3))
print('Initial :', a) a.extend(range(3))
print('Extended:', a) print('Slice :', a[2:5]) print('Iterator:')
print(list(enumerate(a)))

目前支持的操作包括分片、迭代以及在末尾增加元素。

1.3 候选字节顺序

如果数组中数据没有采用原生的字节顺序,或者在发送到一个采用不同字节顺序的系统(或在网络上发送)之前数据需要交换顺序,那么可以由Python转换整个数组而不必迭代处理每一个元素。

import array
import binascii def to_hex(a):
chars_per_item = a.itemsize * 2 # 2 hex digits
hex_version = binascii.hexlify(a)
num_chunks = len(hex_version) // chars_per_item
for i in range(num_chunks):
start = i * chars_per_item
end = start + chars_per_item
yield hex_version[start:end] start = int('0x12345678', 16)
end = start + 5
a1 = array.array('i', range(start, end))
a2 = array.array('i', range(start, end))
a2.byteswap() fmt = '{:>12} {:>12} {:>12} {:>12}'
print(fmt.format('A1 hex', 'A1', 'A2 hex', 'A2'))
print(fmt.format('-' * 12, '-' * 12, '-' * 12, '-' * 12))
fmt = '{!r:>12} {:12} {!r:>12} {:12}'
for values in zip(to_hex(a1), a1, to_hex(a2), a2):
print(fmt.format(*values))

byteswap()方法会用C交换数组中元素的字节顺序,这比用Python循环处理数据高效的多。

最新文章

  1. git pull错误
  2. Steganography-图片隐写术
  3. 第二十七课:滚轮事件,mouseenter与mouseleave事件的修复
  4. HDU 4737 A Bit Fun
  5. MySQL基础之第15章 MySQL用户管理
  6. python(3)-lambda表达式
  7. #Leet Code# Evaluate Reverse Polish Notation
  8. 【动态规划】【缩点】NCPC 2014 G Outing
  9. 用OpenGL简单编写的一个最简单贪吃蛇游戏
  10. 如何查看Android SDK源码版本
  11. 【HDU 4452 Running Rabbits】简单模拟
  12. DrectX11学习笔记Texture2D有关
  13. Spring 表单提交,后台自动封装有集合对象的对象
  14. treeview调用数据库成树
  15. java UTC时间格式化
  16. JAVAEE 第八周
  17. @Async的简单用法总结
  18. PDF to image
  19. Lazarus的DBGrid中回车键的处理
  20. JavaScript --Window-对话框

热门文章

  1. python 2 计算字符串 余弦相似度
  2. kendo ui 好用的小部件--grid
  3. 【UEFI】--- 探究BIOS NvRam空间的的位置以及大小
  4. const与vector的搭配
  5. qt creator源码全方面分析(2-10-2)
  6. finalize的用法
  7. [HTML5] input标签 disable属性
  8. window下建立vue.js项目
  9. 细读jsr中的yield语义,或者不是我们想象中的那样
  10. 【Python3爬虫】一次应对JS反调试的记录