Noticias Programación

Código de Python automáticamente

Python es diferente en el sentido de que su comunidad tiene un fuerte sentido de lo que hace que el código sea «pitónico». Significa que los principiantes y los intrusos son fáciles de detectar y de descifrar: «hombre, tu código NO es Pythonic». Ahora, un equipo de investigación ha automatizado el acto de refectorización de código para convertirlo en Pythonic.


Puede escribir código en cualquier idioma como si fuera más como otro idioma. Esto sucede a menudo en Python porque, si bien Python no es como la mayoría de los lenguajes orientados a objetos basados ​​en clases, aún puede escribir Python como si fuera Java o C ++ o C # o … y muchos programadores hacen precisamente eso.

Los expertos de Python, sin embargo, tienden a valorar el código escrito en un estilo que hace uso de las funciones que ofrece Python, es decir, valoran el código Pythonic. Dicho esto, toda la cuestión de qué es el código Pythonic es un misterio. Ahora tenemos una investigación de un equipo de la Universidad Nacional de Australia y Data61 de CSIRO que se transmitirá en noviembre en la Conferencia y Simposio sobre los Fundamentos de la Ingeniería de Software (ESEC/FSE 2022) de ACM Joint European Software Engineering tratando de descubrir. Como subproducto, muestra cómo automatizar la conversión de código que no es Pythonic a Pythonic y ha creado una herramienta de refactorización.

Según un análisis de 7638 repositorios de Python en GitHub, encontramos que el código de Python no idiomático que se puede implementar con modismos de Python ocurre con frecuencia y de forma generalizada. Desafortunadamente, no existe una herramienta para la refactorización automática de dicho código no idiomático en código idiomático. En este documento, diseñamos e implementamos una herramienta de refactorización automática para hacer que el código de Python sea idiomático

Pero, ¿qué es exactamente un idioma de Python?

Identificamos nueve modismos pictónicos contrarrestando sistemáticamente la gramática de sintaxis abstracta de Python y Java.

Bueno, te dije que Python no era Java. Entonces, ¿cuáles son estos modismos objetivos? Si eres un pitonista, es muy posible que adivines:

Entendiendo la lista
ex. t =[i for i in range(10000)]Establecer entendimiento
p.ej. simpsons_set = {palabra por palabra en caracteres} Entendiendo Dict
ex. b = {v: k for k, v in a.items()} Comparación de cadenas
por ejemplo a <= b <= c <= d <= e <= f Prueba del valor de verdad
por ejemplo, si no es para: pasar Loop Else
ex. para x en el intervalo (2, n):
si n% x == 0:
descanso
otro:
pasar Asignar varios objetivos
ex. a, b, c, d = 2, 3, 5, 7 estrellas en llamada de función
p.ej. s = suma (* valores) para múltiples objetivos
ex. por producto, precio, unidades_vendidas en ventas:
a = producto, precio, unidades_vendidas

Bueno, creo que la comprensión es solo una expresión idiomática, así que diría que solo enumeran 7, pero es una cuestión de opinión. Debo admitir que no uso todos estos modismos porque creo que algunos no son tan claros como las alternativas: el modismo 4 puede ser difícil de entender y el modismo 6 no se usa con la frecuencia suficiente para que se entienda bien, pero sí, lo reconozco. todos ellos como especial para Python.

Entonces, ¿es bueno usar código Pythonic? Bueno, parece ser más rápido. Los investigadores encontraron que el código idiomático es de 1,09 a 2,07 veces más rápido que el código no idiomático. Podría ser más rápido, pero ¿es mejor? Después de revisar muchas preguntas sobre Stack Overflow, los investigadores concluyeron que escribir código idiomático tiene sus propios desafíos. La cantidad de preguntas sobre modismos y el grado de actividad sugieren fuertemente que hay mucho que preguntar.

Para intentar automatizar la refactorización del código que no es de Python en Pythonic, se determinaron los patrones sintácticos del código que no es de Python: los olores del código antiidioma. Luego se usa la reescritura AST para transformar el código en Pythonic. Luego lo prueban y concluyen:

Nuestra herramienta de refactorización es robusta y correcta en el código Python del mundo real. La limitación de Python del análisis estático y la lógica compleja del programa pueden causar algunos errores de detección y refactorización poco comunes.

Así que hicieron la única forma real de averiguar si esto era útil: refactorizaron algunos repositorios de GitHub y enviaron las mejoras como solicitudes de incorporación de cambios, 90 en total. De estos 34 fueron aceptados, 28 fueron fusionados y solo 23 fueron rechazados. Algunos de los comentarios de negación hacen eco de lo que pienso de algún código Pythonic:

«Aunque su cambio es realmente factible, creo que el estilo original es más legible»

«Siento que declararlo vacío es más explícito y legible»

Todo esto solo prueba que lo que es legible está en el ojo del espectador. Los modismos pueden ser objetivos, pero su comprensibilidad es muy subjetiva.

Si cree que es una buena idea, le alegrará saber que esta refactorización podría llegar a un linter cercano a su IDE muy pronto, ya que este es el consejo principal para seguir trabajando.

Sin embargo, antes de cerrar les recuerdo el zen final de Python:

Debe haber una, y preferiblemente solo una, manera obvia de hacer esto. Aunque hacerlo puede no ser obvio al principio
a menos que seas holandés.

Tan verdadero.

pitón3



mike james es el autor de la Python del programador: algo completamente diferente serie de libros que se proponen mostrar cómo Python se diferencia de otros lenguajes de programación y cómo sus características especiales merecen nuestra atención. El segundo volumen de Programmer’s Python: Everything Is Data se lanzó en mayo y la semana pasada vio la publicación de Programmer’s Python: Everything Is An Object, 2nd Ed. El tercer volumen sobre Python asíncrono y concurrente se espera para las próximas semanas.

También puede gustarte...