我将定义一个结构并将其传递给一个函数:
在C:
struct stru {
int a;
int b;
};
s = new stru()
s->a = 10;
func_a(s);
如何在Python中完成此操作?
答案 0 :(得分:25)
除非你没有告诉我们你的情况有什么特别之处,否则只需使用这样的东西:
class stru:
def __init__(self):
self.a = 0
self.b = 0
s = stru()
s.a = 10
func_a(s)
答案 1 :(得分:12)
如果你对不可变类型没问题,可以使用命名元组。
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)
一样实例化的类。还有很大的改进空间,但是如果你发现自己做了很多这样的事情,它就能收回成本。
答案 2 :(得分:6)
很抱歉在5天后回答这个问题,但我认为这值得说明。
使用ctypes
模块,如下所示:
from ctypes import *
class stru(Structure):
_fields_ = [
("a", c_int),
("b", c_int),
]
当您需要执行类似C的操作(即C数据类型甚至使用C DLL)时,ctypes
是模块。此外,它是标准的
答案 3 :(得分:2)
在Python中使用类和代码Python思维,避免只用相同的东西写另一种语法。
如果您需要结构存储在内存中,请尝试模块struct
答案 4 :(得分:1)
(对于未来的谷歌搜索者): 最常用的C / C ++方法是使用没有构造函数的类:
class my_struct:
name = ''
health = 0.0
count = 0
values_list = [1,2,3]
s1 = my_struct()
s1.count = 5
s1.name = 'some string'
s1.health = 0.1
s1.values_list = [4,5,6]
print s1.name
# some string