Beh, quel tipo di dipende da ciò che sei disposto a chiamare una "struttura dati". Secondo Wikipdia, una struttura dati è semplicemente un "modo particolare di archiviare e organizzare i dati in un computer in modo che possa essere utilizzato in modo efficiente". Pertanto, le classi sarebbero una forma di struttura dei dati e le classi sono ampiamente utilizzate in Python. Ma, per il gusto di questa risposta, assumerò che tu sia più interessato a ciò che potresti conoscere in una classe di strutture e algoritmi di dati (ad esempio alberi, liste collegate, code, hash, ecc ...).
Ora, grazie alla sintassi simile a pseudo-codice di Python, può essere un linguaggio molto utile per l'implementazione delle strutture di dati. Se non altro per aiutare semplicemente a comprendere questi concetti di base. Ad esempio, quando ho appreso per la prima volta della lista collegata ho deciso di implementarli in Python:
class node:
def __init__(self, data = None, is_header = False):
self.data = data
self.next = None
def __str__(self):
return "|{0}| --> {1}".format(str(self.data), str(self.next))
class linked_list:
def __init__(self):
self.header = node("!Header!", True)
def add_node(self, add_me):
current_node = self.header
while 1:
if current_node.next == None:
current_node.next = add_me
break
else:
current_node = current_node.next
def print(self):
print (str(self.header))
Ora, questo non è un esempio perfetto, né è nemmeno un'implementazione completamente corretta di una lista collegata, ma va ad illustrare qualcosa:
La semplice sintassi di Python può essere utile per comprendere le strutture di dati
Un altro esempio potrebbe essere una coda di priorità che ho ricostruito nel corso della giornata:
class priority_queue:
def __init__(self):
self.element = []
self.priority = []
def enqueue_with_priority(self, me, priority):
where = 0
for i in range(len(self.element)):
if not priority < self.priority[i]:
where = i
break
self.element.insert(where, me)
self.priority.insert(where, priority)
def dequeue_highest(self):
return self.element.pop(0)
def print(self):
for i in self.element:
print i
Ancora una volta, non un'implementazione perfetta ma illustra un altro vantaggio della codifica di una struttura dati in Python:
Python è utile nella prototipazione delle strutture di dati per ottimizzarle per linguaggi di programmazione di livello inferiore
Guardando indietro a questo codice vedo difetti nella mia implementazione. Il codice Python, tuttavia, tende ad essere breve e dolce. Quindi, se volessi implementare una struttura di dati in un linguaggio di livello inferiore (come un linguaggio in stile c) potrei prima generare un prototipo Python veloce e poi ottimizzare in seguito.
Infine, penso che Python possa aiutare nello sviluppo di strutture dati, perché:
In Python, lo sviluppo è veloce, gli errori sono consentiti e puoi provare le cose.
Immagina di costruire una struttura dati simile a una tabella hash, in un linguaggio compilato con strong tipizzazione, in cui di solito dovresti provare qualcosa in un IDE, quindi devi compilarlo ed eseguirlo. In Python, puoi semplicemente estrarre IDLE, iPython o l'interprete Python e provare solo le cose! Non è necessario ricompilare ogni piccola modifica alla funzione di hash che vuoi provare, basta collegarlo all'interprete.
Quindi, in conclusione, immagino che quello che sto dicendo sia che sono d'accordo con te: non c'è molta praticità nella costruzione delle tue strutture dati (dato che la maggior parte di ciò che vuoi è già stato implementato e ottimizzato). Tuttavia, per me, c'è un sacco di benefici educativi (grazie alla facilità di sintassi di Python), così come un sacco di libertà creativa e di sviluppo (a causa del basso-vincolo di Python, EAFP design).
È importante notare che sebbene python (attraverso la sua libreria ad ampio raggio) fornisca molte strutture dati standard, una "struttura dati" (per definizione) può essere praticamente qualsiasi cosa. Quindi, in Python come in ogni altro linguaggio che possiamo usare per risolvere problemi non banali, avremo bisogno di definire nuove strutture di dati. Pertanto, è abbastanza discutibile che i seri sviluppatori Python creano strutture dati personalizzate proprio come fanno gli sviluppatori seri in altri linguaggi.