免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 24393 | 回复: 1
打印 上一主题 下一主题

Python中使用类似C语言的结构(Struct) [复制链接]

论坛徽章:
3
卯兔
日期:2013-08-15 13:17:31处女座
日期:2014-01-10 11:35:23双子座
日期:2014-01-25 02:16:06
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-22 14:44 |显示全部楼层 |倒序浏览
在一篇帖子中看到一位朋友需要在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"]
复制代码
截图如下

论坛徽章:
3
卯兔
日期:2013-08-15 13:17:31处女座
日期:2014-01-10 11:35:23双子座
日期:2014-01-25 02:16:06
2 [报告]
发表于 2012-04-22 22:26 |显示全部楼层
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP