2015-10-09 12 views
5

In alcune lingue (per lo più funzionali) si può fare qualcosa di simile:Come si alias un tipo in python?

type row = list(datum) 

o

type row = [datum] 

In modo che possiamo costruire cose come questa:

type row = [datum] 
type table = [row] 
type database = [table] 

C'è un modo di farlo in python? Puoi farlo usando le classi, ma Python ha alcuni aspetti funzionali quindi mi chiedevo se fosse possibile farlo in un modo più semplice.

risposta

2

Python è digitato in modo dinamico. Mentre la risposta di Łukasz R. è corretta per scopi di tipo hinting (che a sua volta può essere usata per analisi statiche e linting), in senso stretto, non è necessario fare per fare questo lavoro. Basta costruire le vostre liste di questo tipo e assegnarli alle variabili:

foo_table = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
bar_table = ... 
foo_database = [foo_table, bar_table, ...] 

Tipo suggerimenti sono veramente utile, perché possono aiutare a documentare come il vostro codice di comportamento, e possono essere controllati sia staticamente e in fase di esecuzione. Ma non c'è niente forzando a farlo se è scomodo.

9

Da Python 3.5 è possibile utilizzare il modulo typing.

docs Citando, Un tipo di alias è definito assegnando il tipo da l'alias:

Vector = List[float] 

Per ulteriori informazioni sulla far rispettare i tipi in Python si consiglia di acquisire familiarità con PEP: PEP483 e PEP484.

Python storicamente utilizzava la digitazione anatra invece di una digitazione forte e non aveva un modo incorporato di applicare i tipi prima della versione 3.5.

+0

questo è esattamente quello che stavo cercando, grazie! – Wysaard

+1

Si noti che i suggerimenti del tipo sono destinati all'analisi statica e all'uso da parte dei linters. I suggerimenti tipo non vengono utilizzati per il controllo del tipo di runtime. Né vengono utilizzati per l'ottimizzazione. Si noti inoltre che i suggerimenti di tipo sono nella loro infanzia. Quasi nessun codice in Python ha suggerimenti sui tipi e non sono stati sviluppati strumenti di analisi per gestirli (per quanto ne so). –

+0

Dalla sezione [Non-obiettivi] (https://www.python.org/dev/peps/pep-0484/#non-goals) di PEP484: "Mentre il modulo di digitazione proposto conterrà alcuni blocchi di costruzione per il tipo di runtime controllo - in particolare la funzione get_type_hints() - i pacchetti di terze parti dovrebbero essere sviluppati per implementare specifiche funzionalità di controllo del tipo di runtime, ad esempio utilizzando decoratori o metaclassi.Utilizzando i suggerimenti del tipo per le ottimizzazioni delle prestazioni viene lasciato come esercizio per il lettore. " –

0

Che ne dici di qualcosa come row = lambda datum: list(datum)? Non esiste un vero tipo di supporto per l'introspezione, ma è un modo molto semplice di "aliasing", dato l'amore di Python per la tipizzazione delle anatre. Ed è funzionale! Tipo.

+0

Se vuoi davvero fare questo genere di cose, usa 'row = list'. Non c'è bisogno di complicare le cose. – Kevin

+0

@Kevin Che funziona per 'row', sì, ma non per' table' o 'database'. – JAB

+0

Davvero? Qual è la firma di 'table()'? Com'è del tutto diverso da 'list()'? – Kevin