In Python, è l'uso di `dichiarazione del` un codice odore?
Domanda
Io tendo ad usare ogni volta che sto lavorando su uno script del prototipo, e:
- Utilizzare una variabile piuttosto comune (come ad esempio
fileCount
), e - Avere un metodo di grandi dimensioni (oltre 20 linee), e
- Non utilizzare ancora le classi o gli spazi dei nomi.
In questa situazione, al fine di evitare potenziali conflitti variabile, ho eliminare il bastardo, non appena mi sono fatto con esso. Lo so, in un codice di produzione devo evitare 1., 2. e 3., ma andando da un prototipo che lavora per una classe completamente lucido è molto tempo. A volte potrei voler accontentarsi di un sub-ottimale, lavoro refactoring rapida. In quel caso trovo mantenendo le dichiarazioni del
a portata di mano. Sto sviluppando un inutile, cattiva abitudine? È del
totalmente evitabile? Quando sarebbe una buona cosa?
Soluzione
Non credo che del
di per sé è un odore di codice.
Riutilizzo di un nome variabile nello stesso namespace è sicuramente un odore di codice non utilizza classi e altri namespace all'occorrenza. Quindi, utilizzando del
per facilitare questo genere di cose è un odore di codice.
L'uso unico veramente appropriato di del
che mi viene in mente la parte superiore della mia testa è rottura riferimenti ciclici, che sono spesso un odore di codice, nonché (e spesso, questo non è nemmeno necessario). Ricordate, tutto del
non fa altro che eliminare il di riferimento per l'oggetto e non l'oggetto stesso. Che sarà curato da uno conteggio di riferimento o raccolta dei rifiuti.
>>> a = [1, 2]
>>> b = a
>>> del a
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> b
[1, 2]
Si può vedere che l'elenco è tenuto in vita dopo l'istruzione del
perché b
detiene ancora un riferimento ad esso.
Così, mentre del
non è davvero un odore di codice, può essere associato con le cose che sono.
Altri suggerimenti
Qualsiasi codice che è ben organizzato in funzioni, classi e metodi non ha bisogno del
se non in casi eccezionali. Obiettivo di costruire le applicazioni ben ceduti da subito utilizzando più funzioni e metodi, evitare di riutilizzare i nomi delle variabili, ecc
L'uso di una dichiarazione del
è OK - non porta ad alcun problema, lo uso spesso quando io uso Python come un sostituto per gli script di shell sul mio sistema, e quando sto facendo esperimenti di script. Tuttavia, se appare spesso in una vera e propria applicazione o una libreria, è un'indicazione che qualcosa non è a posto, probabilmente mal strutturato codice. Non ho mai dovuto usarlo in un'applicazione, e vi piacerebbe raramente vedo utilizzato ovunque sul codice che è stato rilasciato.