En cualquier orden, esta es una primera impresión
Voy a tomar como referencia el lenguaje C por conocerlo, pero no es una comparativa. Dejando de lado que usualmente Python se ejecuta bajo un intérprete, lo primero que me llamó la atención es que las funciones en lugar de definirse entre llaves {}, requieren indentación, (sí, requieren ), supongo esto es para que la legibilidad del código no quede del todo librada al programador y sea parte de la sintaxis, otro detalle inmediato es que no se usa punto y coma al final de las líneas, y que los comentarios de código se escriben anteponiendo #. Aunque incompatibles con C, son lindas cosas, hasta ahí particularidades que no aportan mayor ventaja, veamos algo más, un hola mundo.
Hello World
- En C
// Comentario int main(void) { printf("hola mundo" ); return 0; }
- En Python
# Comentario print ("hola mundo")
Python main
#1: Notar la indentación (viene a ser equivalente a las llaves de C)#Definiendo main como función def main(): print ('hola mundo') #1 if __name__ == '__main__': #2 main()
#2: Aquí el hecho de no tener indentación da por terminada la def anterior
hola mundo hola mundo hola mundo hola mundo hola mundo#Aprovecho a mencionar una singular forma de repetir strings print("hola mundo " * 5)
Python 2.x
print "hola mundo"
print ("hola mundo")
Esto evidentemente puede ocacionar problemas con código 'viejo', pero como salvedad digamos que "no es tan importante de donde viene, sino adonde va", y creo que es una mejora uniformizar el llamado a funciones. Otra cosa, para poder usar ciertos caracteres (por ejemplo tildes) en los comentarios se debe aclarar primero la codificación que se va a usar en el archivo, por ejemplo:
#coding: latin-1
Por suerte conseguir una IDE funcional fue relativamente rápido: pyDev.org (basada en eclipse que además tiene una versión stand-alone Aptana y por lo visto funcionan ok).
Hay también un plugin para Netbeans para los que nos gusta esa IDE.
List Comprehension
Esto me gusta, al menos es algo útil, varios lenguajes traen esta característica o alguna similar, las "listas por comprensión" son una forma de procesar y generar listas. A la lista se ingresan, filtran y extraen datos de una forma directa, especificando el qué y sin los detalles de cómo. Esto podría pensarse en términos más generales como el avance de la abstracción en los lenguajes, (pensemos que hay microcontroladores que ni siquiera tienen una instrucción de multiplicar, y las multiplicaciones se hacen mediante desplazamientos de bits y/o sumas sucesivas), pero todo eso es invisible para el lenguaje, y es solucionado por el compilador, por lo tanto en ese caso básico ya se puede ver cómo un "algoritmo oculto" (lenguaje abstracto) resuelve el cómo especificando sólamente el qué. Como siempre toda abstracción exige que se pierdan ciertos detalles, y el control sobre esos detalles, y aunque esto aparentemente limita ciertas posibilidades a bajo nivel permitite facilitar otras de mayor nivel que en definitiva son más complejas y tienen un mayor alcance. Aquí algunos ejemplos que se explican a sí mismos con los resultados
D#Imprime el elemento 3 #Va a imprimir la D (ya que empieza en indice=0 tal como los array de C) lista = ['A', 'B', 'C', 'D', 'E'] print( lista[3] )
[200, 400, 600, 800, 1000]#coding: latin-1 #Ahora vamos a usar 'comprehension' para extraer datos #Se obtienen, modifican e imprimen todos los elementos de la lista #multiplicando cada valor por 2 #Observar que la palabra elemento sólo se usa para referenciar el item #puede usarse cualquier nombre de variable #(abajo está la misma operación mediante for (sin comprehension) ) listaNumeros = [100, 200, 300, 400, 500] listaCompre= [2*elemento for elemento in listaNumeros] print(listaCompre) listaClasic = [] for valor in listaNumeros: listaClasic.append(2*valor) print(listaClasic)
[30, 40, 50] ['cómo', 'va']#coding: latin-1 #Hacemos un poco más complejo el comprehension agregando unos if's #Para modificar y seleccionar algunos items de la lista #(Notar que la condición la chequea antes de hacer la operación) listaNumeros = [1, 2, 3, 4, 5] listaSelecta =[10*valor for valor in listaNumeros if valor>=3] print(listaSelecta) listaDos=['hola', 'cómo', 'va'] listaFiltrada = [valor for valor in listaDos if valor!='hola'] print(listaFiltrada)