PDA

Ver la Versión Completa : ¿No sabes Python? no hay problema...


Chris
01-04-2011, 19:46:06
Quiero estrenar este nuevo foro compartiendo uno de los mejores cursos para Python que hay. Se llama Dive into Python, o Inmersión en Python (http://es.diveintopython.org/). Es un libro gratuito pensado para las personas que desconocen el lenguaje pero ya tienen experiencia en otros lenguajes de programación.

Además, pueden leer un poco acerca del lenguaje en la Wikipedia (http://es.wikipedia.org/wiki/Python) si les interesa saber un poco sobre él antes de darle una leída al curso.

Saludos,
Chris

D-MO
01-04-2011, 19:57:51
Gracias Chris por la aportación, muy buen libro.

Solo agregar que otra buena fuente de información es la propia documentación de Python (http://python.org), disponible en su sitio web, en la sección de documentación (http://www.python.org/doc/).

Saludos.

Chris
01-04-2011, 20:02:21
Gracias Chris por la aportación, muy buen libro.

Solo agregar que otra buena fuente de información es la propia documentación de Python (http://python.org), disponible en su sitio web, en la sección de documentación (http://www.python.org/doc/).

Saludos.

Ahhh claro que también es buena! Gracias por complementar mi post. Si tú o alguien más sabe de alguna otra buena fuente para aprender el lenguaje invito a que la comparta. Así nos beneficiamos todos.

Saludos,
Chris

roman
01-04-2011, 20:06:29
Yo tengo ese libro y otro similar de wxPython. Y digo los tengo porque como no soy muy dado a la lectura en línea de coasa de más de tres párrafos, los encargué en su versión impresa.

En su momento, cuando les eché una ojeada me parecieon muy buenos.

// Saludos

rgstuamigo
01-04-2011, 20:17:49
¡Que bueno está ésto!...un lenguaje más para aprender...:D
Haber los que ya manejan éste lenguaje de programación, podrían sugerirnos que IDE (http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado) existen en la actualidad para programar en Python, dada sus experiencias con éste lenguaje?...:confused:

roman
01-04-2011, 20:51:29
No estoy entrado en el tema pero el Eric (http://eric-ide.python-projects.org/index.html) luce bien. Está escrito en Python y por ende es multiplataforma.

// Saludos

D-MO
01-04-2011, 22:24:34
No estoy entrado en el tema pero el Eric (http://eric-ide.python-projects.org/index.html) luce bien. Está escrito en Python y por ende es multiplataforma.
Hace mucho que he leido sobre el tal eric esi y nunca he tenido la oportunidad de conocerlo :p, que falta de amabilidad la mía.

Desde que empecé con python lo he usado con gedit (http://gedit.org) y no me quejo. Así me he obligado a memorizar mejor el lenguaje. Hace apenas unas dos o tres semanas le dí una oportunidad al pydev (http://pydev.org), que es un plugin de eclipse (http://eclipse.org). Nunca me ha agradado del todo eclipse, un devorador de recursos, pero el pydev me ha simpatizado bastante. En la oficina, donde tengo una core2quad+4GBram+debian no tengo problemas en usarlo, ni se siente :D... Pero en mi laptop celeron+1GBram+debian si va un poco mal, aquí si sigo usando gedit.

Les recomiendo que lo prueben, para que se den una idea de el y quizá a ustedes les funcione mejor, de la mano con eric (que yo lo empezaré a probar hoy mismo) para que cada uno saque sus propias conclusiones.

Saludos.

Al González
01-04-2011, 23:22:55
Quiero estrenar este nuevo foro compartiendo uno de los mejores cursos para Python que hay. Se llama Dive into Python, o Inmersión en Python (http://es.diveintopython.org/). Es un libro gratuito pensado para las personas que desconocen el lenguaje pero ya tienen experiencia en otros lenguajes de programación.

Gracias por la referencia, Chris.

Ya descargué e instalé un acceso directo al PDF. Leyendo algunos párrafos se me hizo algo tarde para comer, pero ha valido la pena.

Me uno a la inquietud de Roberto sobre qué IDE sería el recomendable. Eché un vistazo a las pantallas (http://eric-ide.python-projects.org/eric-screenshots.html) del mencionado por Román, y también me gustó. ¿Más sugerencias sobre IDEs? Quisiera descargar uno y empezar a probar los ejemplos este fin de semana. :)

Agrego: De lo que he leído, no me ha gustado que el método index de las listas eleve una excepción en lugar de devolver -1 o algo por el estilo. ¿Se puede crear una clase derivada de lista para añadirle un método "IndexOf" más amable? Y, derivado de esto, otra pregunta: ¿todos los métodos de Python son redefinibles, es decir, como los métodos virtuales de Delphi?

D-MO
01-04-2011, 23:58:22
Agrego: De lo que he leído, no me ha gustado que el método index de las listas eleve una excepción en lugar de devolver -1 o algo por el estilo. ¿Se puede crear una clase derivada de lista para añadirle un método "IndexOf" más amable? Y, derivado de esto, otra pregunta: ¿todos los métodos de Python son redefinibles, es decir, como los métodos virtuales de Delphi?
Con respecto a esto, si puedes sobreescribir un método o crear uno nuevo, lo que cambiará será la forma en que declares una lista, ya que con Python basta con que hagas algo como "a = [ ]" para decir que a es una lista, pero si creas una clase propia con este método entonces deberás decir que "a = myList()" previo a su uso y la clase myList deberá heredar de la clase list.

Un ejemplo de ello sería algo como:

class myList(list):

def indexOf(self, value):
try:
return self.index(value)
except ValueError:
return -1


a = myList()

print a.indexOf('xxx')


También podrías sobreescribir el mismo método index, eso lo dejo de tarea :D

Saludos.

Edito:
Acá el como probarlo con ambos casos, exista o no el elemento en la lista

a = myList()
b = myList()
b.append('xxx')

print a.indexOf('xxx')
print b.indexOf('xxx')

Al González
02-04-2011, 00:50:18
[...] También podrías sobreescribir el mismo método index, eso lo dejo de tarea :D

Gracias D-MO, sin duda será interesante ver cómo se redefine (para lo que en Delphi se usa "Override") un método. :)

D-MO
02-04-2011, 01:34:48
Gracias D-MO, sin duda será interesante ver cómo se redefine (para lo que en Delphi se usa "Override") un método. :)
Por nada Al, para eso estamos ;).

Por cierto, cuando escribí el post de arriba estaba por salir de la oficina y en mi afán de responder a tu pregunta olvidé que sería un error devolver -1 como posición en una lista en Python, puesto que el -1 es utilizado para hacer referencia a los elementos en la lista en orden inverso, así -1 es el último, -2 el penúltimo, etc... Lo correcto sería devolver None para indicar la ausencia del elemento en la lista.

Así, si tenemos:
x = ['a','b','c']
y decimos
print x[-1]
obtenemos
c


La clase myList entonces debería quedar:
class myList(list):

def indexOf(self, value):
try:
return self.index(value)
except ValueError:
return None

Saludos

Casimiro Notevi
02-04-2011, 01:55:06
¡¡¡Que extraño!!!, ¿no?

Al González
02-04-2011, 01:57:23
La clase myList entonces debería quedar:
class myList(list):

def indexOf(self, value):
try:
return self.index(value)
except ValueError:
return None

Saludos

Quiero pensar que, como en Delphi sería menos costoso evitar la excepción:


def IndexOf (self, Value):
if Value in self:
return self.index (Value)
else:
return None


¿Voy bien? :o

Interesante también lo referente a uso de self: http://es.wikipedia.org/wiki/Python#Clases

Al González
02-04-2011, 02:03:27
¡¡¡Que extraño!!!, ¿no?
Para los que estamos acostumbrados a la carcelaria libertad de las llaves o del begin y end, sí. ;)

D-MO
02-04-2011, 02:45:32
¡¡¡Que extraño!!!, ¿no?
Un poco casi, un poco :D



def IndexOf (self, Value):
if Value in self:
return self.index (Value)
else:
return None


¿Voy bien?

Pues Al, el código es funcional, pero, ¿para que evadir el try?

Al González
02-04-2011, 03:37:08
Pues Al, el código es funcional, pero, ¿para que evadir el try?

Pues para:

1. Hacer más ágil la ejecución. Dudo mucho que el mecanismo de elevar y atrapar una excepción, en cualquier lenguaje, sea más rápido y ligero que preguntar antes de intentar.

2. Hacer más legible el código. Como lo he puesto me parece queda más claro.

3. Evitar asunciones. Como lo has puesto das por sentado que si se eleva una excepción es porque el elemento no existe en la lista (¿y si sucede por otro motivo?).

Es mi punto de vista al respecto. :)

D-MO
02-04-2011, 03:43:57
...Es mi punto de vista al respecto. :)
Los tres puntos que indicas me parecen aceptables, en la medida de lo posible los iré aplicando. Todos los días se aprende algo nuevo.

Saludos.

D-MO
02-04-2011, 04:04:30
En efecto, tienes la razón en el primer punto, explico:
Teniendo las dos opciones, a y b en los archivos a.py y b.py de la siguiente manera:

a.py

class myList(list):

def indexOf(self, value):
try:
return self.index(value)
except ValueError:
return None

x = myList()

print 'A:', x.indexOf('test')


b.py

class myList(list):

def indexOf(self, value):
if value in self:
return self.index(value)
else:
return None

x = myList()

print 'B:', x.indexOf('test')


Se obtiene como resultado lo siguiente:


~/tmp$ time python a.py
A: None

real 0m0.046s
user 0m0.028s
sys 0m0.000s

~/tmp$ time python b.py
B: None

real 0m0.033s
user 0m0.024s
sys 0m0.000s



Gracias por el aporte

Saludos.

roman
02-04-2011, 05:23:40
sería un error devolver -1 como posición en una lista en Python, puesto que el -1 es utilizado para hacer referencia a los elementos en la lista en orden inverso, así -1 es el último, -2 el penúltimo, etc...

En algún momento, hice un pequeño e incompleto resumen del usos de listas para no confundirme con el acceso por índices. Lo adjunto aquí por si sirve de algo.

// Saludos

fjcg02
02-04-2011, 15:12:10
Podeis encontrar más información en

http://mundogeek.net/tutorial-python/

Saludos

mamcx
02-04-2011, 23:16:52
Haber los que ya manejan éste lenguaje de programación, podrían sugerirnos que IDE (http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado) existen en la actualidad para programar en Python, dada sus experiencias con éste lenguaje?...:confused:

AL igual que con *todos* los lenguajes dinámicos, el soporte de IDE al que te acostumbras con Delphi (o VS, o XCode) es mucho mas pobre.

Asi que basicamente, lo mas que tienes es un editor de texto glorificado y un achivo de proyectos.

Entre lo que he usado, lo mejor esta entre Komodo (http://www.activestate.com/komodo-ide) y PyCharm (http://www.jetbrains.com/pycharm/) - PyCharm esta hehco en Java, y como todo lo hecho en java, es lento (aun en un Mac Pro) y apesta. Pero es el mejor IDE pa python que hay, en mi opinion.

El estado de las demas opciones varia mucho, Para pocos archivos, bien. Pero para proyectos grandes, no tan bien. Lo mas dificil es integrarlo en proyectos web, solo PyCharm me funciono sin problemas con django y Google App Engine.

Por otro lado, casi todo el codigo de python lo hago en TextMate (http://macromates.com/). La cosa es que los lenguajes dinamicos lo que te quitan en habilidad autocompletar codigo te lo dan en otras cosas. En el caso de python, el codigo tiende a ser mas simple y mas compacto. No es *tan* necesario el IDE y el debugger, como si en el caso de Delphi. No hay que compilar, y se puede correr un archivo de forma directa. Como es esto util?

En un proyecto de 1.000 archivos, el archivo 237 es una rutina que inserta un cliente. En una app compilada, tienes que arrancar desde el inicio y navegar hasta esa funcion. En python, puedes ejecutar *directamente* el archivo de esa funcion.

Es una ventaja bestial!

D-MO
03-04-2011, 06:41:51
mamcx:
Si no me equivoco, PyCharm está basado en Eclipse, porfavor aclárame esta duda.

De Komodo, solo decir que probé la versión que ofrecen para PHP y no me gustó mucho... bueno, aclaro, solo probé Komodo Edit (http://www.activestate.com/komodo-edit):o, no el IDE que venden.

Saludos.