python del

En Python, ¿es el uso de la declaración `del` un olor de código?



title in python plot (2)

Cualquier código que esté bien organizado en funciones, clases y métodos no necesita del excepto en circunstancias excepcionales. Intente construir sus aplicaciones bien factorizadas desde el principio utilizando más funciones y métodos, evite reutilizar nombres de variables, etc.

El uso de una declaración está bien. No conlleva ningún problema, lo uso a menudo cuando uso Python como reemplazo de los scripts de shell en mi sistema y cuando estoy realizando experimentos con scripts. Sin embargo, si aparece a menudo en una aplicación o biblioteca real, es una indicación de que algo no está bien, probablemente un código mal estructurado. Nunca tuve que usarlo en una aplicación, y rara vez lo verías usado en algún lugar del código que se haya publicado.

Tiendo a usarlo cuando estoy trabajando en un script de prototipo, y:

  1. Use una variable algo común (como fileCount ), y
  2. Tener un método grande (más de 20 líneas), y
  3. No utilice clases o espacios de nombres todavía.

En esta situación, para evitar posibles choques de variables, elimino el bugger tan pronto como termine. Sé que, en un código de producción, debería evitar 1., 2. y 3., pero pasar de un prototipo que funciona a una clase completamente pulida consume mucho tiempo. A veces, me gustaría conformarme con un trabajo de refactorización rápida y subóptimo. En ese caso, me parece tener las declaraciones del mano. ¿Estoy desarrollando un hábito innecesario, malo? ¿Es totalmente evitable? ¿Cuándo sería una buena cosa?


No creo que del por sí mismo sea un olor de código.

Reutilizar un nombre de variable en el mismo espacio de nombres es definitivamente un olor de código, ya que no se usan clases y otros espacios de nombres donde sea apropiado. Así que usar del para facilitar ese tipo de cosas es un olor de código.

El único uso realmente apropiado de del que puedo pensar fuera de la cabeza es romper referencias cíclicas que a menudo también son un olor de código (y muchas veces, esto ni siquiera es necesario). Recuerde, todo lo que hace es eliminar la referencia al objeto y no el objeto en sí. Eso se hará por recuento de referencias o recolección de basura.

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

Puede ver que la lista se mantiene viva después de la sentencia del porque b todavía tiene una referencia a ella.

Por lo tanto, si bien no es realmente un olor a código, puede estar asociado con cosas que sí lo son.