免费注册 查看新帖 |

Chinaunix

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

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"]
复制代码
截图如下

论坛徽章:
10
亥猪
日期:2013-08-15 14:50:422015年迎新春徽章
日期:2015-03-04 09:58:112015亚冠之吉达阿赫利
日期:2015-07-21 09:49:08神斗士
日期:2015-11-20 14:07:3815-16赛季CBA联赛之江苏
日期:2017-08-17 14:04:21CU大牛徽章
日期:2013-09-18 15:15:45CU大牛徽章
日期:2013-09-18 15:16:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34巳蛇
日期:2014-03-29 19:05:3215-16赛季CBA联赛之辽宁
日期:2022-04-08 16:41:44
2 [报告]
发表于 2012-04-22 21:16 |只看该作者
新手帮顶lollol

论坛徽章:
3
卯兔
日期:2013-08-15 13:17:31处女座
日期:2014-01-10 11:35:23双子座
日期:2014-01-25 02:16:06
3 [报告]
发表于 2012-04-22 22:26 |只看该作者
谢谢!

论坛徽章:
0
4 [报告]
发表于 2012-04-23 11:45 |只看该作者
谢谢! 学习啦,帮顶!

求职 : 系统工程师等
论坛徽章:
5
技术图书徽章
日期:2014-04-19 22:01:05天蝎座
日期:2014-05-09 13:49:28双子座
日期:2014-06-16 15:08:042015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:28
5 [报告]
发表于 2015-04-29 17:23 |只看该作者
其实用字典应该也可以的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP