voy a definir una estructura y pasarlo a una función:cómo definir una estructura como en C
En C:
struct stru {
int a;
int b;
};
s = new stru()
s->a = 10;
func_a(s);
¿Cómo se puede hacer esto en Python?
voy a definir una estructura y pasarlo a una función:cómo definir una estructura como en C
En C:
struct stru {
int a;
int b;
};
s = new stru()
s->a = 10;
func_a(s);
¿Cómo se puede hacer esto en Python?
menos que haya algo especial acerca de su situación que no nos estás diciendo, sólo tiene que utilizar algo como esto:
class stru:
def __init__(self):
self.a = 0
self.b = 0
s = stru()
s.a = 10
func_a(s)
use tuplas con nombre si está bien con un tipo inmutable.
import collections
struct = collections.namedtuple('struct', 'a b')
s = struct(1, 2)
De lo contrario, simplemente defina una clase si desea poder hacer más de una.
Un diccionario es otra solución canónica.
Si lo desea, puede utilizar esta función para crear clases mutables con la misma sintaxis que 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
es posible que desee agregar un método __repr__
para la integridad. llámalo como s = Struct('s', 'a b')
. s
es entonces una clase que puede instanciar como a = s(1, 2)
. Hay mucho margen de mejora, pero si te encuentras haciendo este tipo de cosas mucho, pagaría por sí mismo.
hola, segundo ejemplo (objeto()) no se puede compilar ... –
Bin Chen. Correcto. Eso me sigue sucediendo a mí. – aaronasterling
Utilice las clases y el código de Python pensando en Python, evite simplemente escribir lo mismo pero en otra sintaxis.
Si necesita la estructura de cómo se almacena en la memoria, tratar módulo struct
Perdón por responder la pregunta 5 días después, pero creo que esto justifica contarlo.
Uso del módulo ctypes
así:
from ctypes import *
class stru(Structure):
_fields_ = [
("a", c_int),
("b", c_int),
]
Cuando tenga que hacer algo parecido a C (es decir, tipos de datos C o incluso utilizar C DLL), ctypes
es el módulo. Además, viene estándar
(para el futuro-google buscadores): la C/C manera más ++ de hacerlo - es el uso de la clase sin constructor:
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
Usted debe leer los tutoriales para principiantes de Python en lugar que preguntar esto aquí. –
'new' no es C; es C++. – strager