如何在C中定义结构体
我打算定义一个结构体,然后把它传递给一个函数:
在C语言中:
struct stru {
int a;
int b;
};
s = new stru()
s->a = 10;
func_a(s);
那么在Python中怎么做呢?
4 个回答
8
抱歉我花了5天才回答这个问题,但我觉得有必要说一下。
可以这样使用 ctypes
模块:
from ctypes import *
class stru(Structure):
_fields_ = [
("a", c_int),
("b", c_int),
]
当你需要做一些类似C语言的事情(比如使用C语言的数据类型或者使用C语言的DLL文件)时,ctypes
就是你需要的模块。而且,它是标准库的一部分,随时可以用。
13
如果你可以接受不可变的类型,那就使用命名元组。
import collections
struct = collections.namedtuple('struct', 'a b')
s = struct(1, 2)
否则,如果你想能创建多个实例,就定义一个类吧。
字典也是一个常见的解决方案。
如果你愿意,可以用这个函数来创建可变的类,语法和 namedtuple
一样。
def Struct(name, fields):
fields = fields.split()
def init(self, *values):
for field, value in zip(fields, values):
self.__dict__[field] = value
cls = type(name, (object,), {'__init__': init})
return cls
你可能还想添加一个 __repr__
方法,让它更完整。你可以这样调用它:s = Struct('s', 'a b')
。这样,s
就是一个类,你可以像这样实例化它:a = s(1, 2)
。虽然还有很多可以改进的地方,但如果你经常需要做这些事情,这样做是值得的。
37
除非你的情况有特别之处没有告诉我们,否则就直接用下面这样的代码:
class stru:
def __init__(self):
self.a = 0
self.b = 0
s = stru()
s.a = 10
func_a(s)