En Python, l'utilisation de l'instruction `del ' est-elle une odeur de code?

J'ai tendance à l'utiliser chaque fois que je travaille sur un script prototype, et:

  1. utilise une variable assez commune (telle que fileCount), et
  2. ont une grande méthode (20 + lignes), et
  3. N'utilisez pas encore de classes ou d'espaces de noms.

Dans cette situation, afin d'éviter un conflit de variables potentiel, je supprime le bugger dès que j'en ai fini avec. Je sais, Dans un code de production, je devrais éviter 1., 2. et 3., mais passer d'un prototype qui fonctionne à une classe complètement polie est beaucoup de temps. Parfois, je pourrais vouloir me contenter d'un travail de refactoring rapide et sous-optimal. Dans ce cas, je trouve que je garde les instructions del à portée de main. Est-ce que je développe une mauvaise habitude inutile? Est-ce que del est totalement évitable? Quand serait-il une bonne chose?

27
demandé sur Mogsdad 2010-12-25 00:28:39

2 réponses

Je ne pense pas que del en soi soit une odeur de code.

La réutilisation d'un nom de variable dans le même espace de noms est définitivement une odeur de code car elle n'utilise pas de classes et d'autres espaces de noms le cas échéant. Donc, utiliser del pour faciliter ce genre de chose est une odeur de code.

La seule utilisation vraiment appropriée de del Que je peux penser du haut de ma tête est de casser les références cycliques qui sont souvent une odeur de code (et souvent, ce n'est même pas nécessaire). Rappelez-vous, tous les {[1] } supprime la référence à l'objet et non à l'objet lui-même. Cela sera pris en charge par le comptage de référence ou la collecte des ordures.

>>> 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]

Vous pouvez voir que la liste est maintenue en vie après l'instruction del Car b Y contient toujours une référence.

Donc, alors que del n'est pas vraiment une odeur de code, il peut être associé à des choses qui le sont.

23
répondu aaronasterling 2012-12-15 07:45:51

Tout code bien organisé en fonctions, classes et méthodes n'a pas besoin de del sauf dans des circonstances exceptionnelles. Visez à construire vos applications bien factorisées dès le début en utilisant plus de fonctions et de méthodes, éviter de réutiliser les noms de variables,etc.

L'utilisation d'une instruction del est correcte - cela ne pose aucun problème, je l'utilise souvent quand J'utilise Python en remplacement des scripts shell sur mon système, et quand je fais des expériences de script. Cependant, si elle apparaît souvent dans un réel application ou bibliothèque, c'est une indication que quelque chose ne va pas, probablement du code mal structuré. Je n'ai jamais eu à l'utiliser dans une application, et vous le verriez rarement utilisé n'importe où sur le code qui a été publié.

7
répondu Rosh Oxymoron 2010-12-24 21:37:25