Chinaunix

标题: Python中使用类似C语言的结构(Struct) [打印本页]

作者: sunny7476    时间: 2012-04-22 14:44
标题: Python中使用类似C语言的结构(Struct)
在一篇帖子中看到一位朋友需要在Python中使用类似C语言中的结构体。原本想直接回复的,后来想,为了方便更多的人看到,就新开一个帖子了。

在Python中使用结构体,所要做的仅仅是下载NumPy,用其中的dtype来实现,实现方法为:

首先,如同C语言一样,新建结构体:
  1. Python:
  2. A = numpy.dtype({'names': ['languageName', 'ranking'],
  3.                             'formats': ['S10', 'i']}, align = True)
复制代码
C:
  1.     typedef struct A
  2.     {
  3.         char a[10];
  4.         int b;
  5.     }SA
复制代码
解释,'names'和'formats'都是结构体数组中的键域,不能更改成其他名称。names字段相当于结构体中的每个成员,formats字段为结构体中按序对应的成员的格式,如本例中formats字段第一项内容为S10,表示对应的names成员languageName的格式为长度10个字节的字符串;同样,formats的第二项"i"表示names第二个成为为32位的整型。
最后的align = True是让Python中的结构数组内存对齐。详见张若愚所著的《Python科学计算》P31.

接下来,新建一个结构数组a:
  1. a = numpy.array([("C", 1), ("Java", 2), ("Python", 8)], dtype = A)
复制代码
现在,就可以像C语言中一样使用结构数组a了,所不同的是访问a[0]的第一个成员使用的方法为:
  1. a[0]["languageName"]
复制代码
截图如下


作者: 千年老狼    时间: 2012-04-22 21:16
新手帮顶lollol
作者: sunny7476    时间: 2012-04-22 22:26
谢谢!
作者: favory    时间: 2012-04-23 11:45
谢谢! 学习啦,帮顶!
作者: qxhgd    时间: 2015-04-29 17:23
其实用字典应该也可以的吧




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2