我将定义一个结构并将其传递给一个函数:
在C:
struct stru {
int a;
int b;
};
s = new stru()
s->a = 10;
func_a(s);
Run Code Online (Sandbox Code Playgroud)
如何在Python中完成此操作?
Nat*_*vis 29
除非你的情况有些特别,你没有告诉我们,只要使用这样的东西:
class stru:
def __init__(self):
self.a = 0
self.b = 0
s = stru()
s.a = 10
func_a(s)
Run Code Online (Sandbox Code Playgroud)
aar*_*ing 12
如果你对不可变类型没问题,可以使用命名元组.
import collections
struct = collections.namedtuple('struct', 'a b')
s = struct(1, 2)
Run Code Online (Sandbox Code Playgroud)
否则,如果您希望能够创建多个类,只需定义一个类.
字典是另一种规范的解决方案.
如果需要,可以使用此函数创建具有相同语法的可变类 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
Run Code Online (Sandbox Code Playgroud)
您可能想要添加__repr__完整性的方法.称之为s = Struct('s', 'a b'). s然后是一个可以实例化的类a = s(1, 2).还有很大的改进空间,但是如果你发现自己做了很多这样的事情,它就能收回成本.
很抱歉在5天后回答这个问题,但我认为这值得说明.
ctypes像这样使用模块:
from ctypes import *
class stru(Structure):
_fields_ = [
("a", c_int),
("b", c_int),
]
Run Code Online (Sandbox Code Playgroud)
当你需要做类似C的事情(即C数据类型甚至使用C DLL)时,ctypes是模块.此外,它是标准的