ho intenzione di definire una struttura e passare in una funzione:come definire una struttura come in C
In C:
struct stru {
int a;
int b;
};
s = new stru()
s->a = 10;
func_a(s);
Come questo può essere fatto in Python?
ho intenzione di definire una struttura e passare in una funzione:come definire una struttura come in C
In C:
struct stru {
int a;
int b;
};
s = new stru()
s->a = 10;
func_a(s);
Come questo può essere fatto in Python?
A meno che non ci sia qualcosa di speciale circa la vostra situazione che non ci stai dicendo, basta usare qualcosa di simile:
class stru:
def __init__(self):
self.a = 0
self.b = 0
s = stru()
s.a = 10
func_a(s)
usare tuple con nome se si sta bene con un tipo immutabile.
import collections
struct = collections.namedtuple('struct', 'a b')
s = struct(1, 2)
Altrimenti, basta definire una classe se si desidera poterne creare più di una.
Un dizionario è un'altra soluzione canonica.
Se si desidera, è possibile utilizzare questa funzione per creare classi mutevoli con la stessa sintassi 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
si potrebbe desiderare di aggiungere un metodo __repr__
per completezza. chiamalo come s = Struct('s', 'a b')
. s
è quindi una classe che è possibile creare un'istanza come a = s(1, 2)
. C'è molto spazio per migliorare, ma se ti ritrovi a fare questo genere di cose molto, si ripagherebbe da solo.
ciao, secondo esempio (oggetto()) non può compilare ... –
Bin Chen. Corretta. Questo continua a succedermi. – aaronasterling
Utilizzare classi e codice Python pensando in Python, evitare di scrivere solo la stessa cosa ma in un'altra sintassi.
Se avete bisogno della struct da come è archiviato nella memoria, provare modulo struct
Siamo spiacenti di rispondere alla domanda 5 giorni dopo, ma penso che questo meriti di essere raccontato.
Utilizza il modulo ctypes
in questo modo:
from ctypes import *
class stru(Structure):
_fields_ = [
("a", c_int),
("b", c_int),
]
Quando avete bisogno di fare qualcosa di simile al C (vale a dire i tipi di dati C o anche utilizzare C DLL), ctypes
è il modulo. Inoltre, si tratta di serie
(per il futuro Google ricercatori): il ++ modo più C/C di farlo - è quello di utilizzare classe senza costruttore:
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
dovreste leggere il tutorial per principianti Python piuttosto che chiedere questo qui. –
'new' non è C; è C++. – strager