Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Python (https://www.clubdelphi.com/foros/forumdisplay.php?f=46)
-   -   ¿No sabes Python? no hay problema... (https://www.clubdelphi.com/foros/showthread.php?t=73120)

Chris 01-04-2011 19:46:06

¿No sabes Python? no hay problema...
 
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. 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 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, disponible en su sitio web, en la sección de documentación.

Saludos.

Chris 01-04-2011 20:02:21

Cita:

Empezado por D-MO (Mensaje 395459)
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, disponible en su sitio web, en la sección de documentación.

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 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 luce bien. Está escrito en Python y por ende es multiplataforma.

// Saludos

D-MO 01-04-2011 22:24:34

Cita:

Empezado por roman (Mensaje 395470)
No estoy entrado en el tema pero el Eric 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 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, que es un plugin de eclipse. 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

Cita:

Empezado por Chris (Mensaje 395450)
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. 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 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

Cita:

Empezado por Al González (Mensaje 395516)
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:
Código:

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

Código:

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

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


Al González 02-04-2011 00:50:18

Cita:

Empezado por D-MO (Mensaje 395524)
[...] 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

Cita:

Empezado por Al González (Mensaje 395533)
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:
Código:

x = ['a','b','c']
y decimos
Código:

print x[-1]
obtenemos
Código:

c
La clase myList entonces debería quedar:
Código:

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

Cita:

Empezado por D-MO (Mensaje 395538)
La clase myList entonces debería quedar:
Código:

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:

Código:

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

Cita:

Empezado por Casimiro Notevi (Mensaje 395544)
¡¡¡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

Cita:

Empezado por Casimiro Notevi (Mensaje 395544)
¡¡¡Que extraño!!!, ¿no?

Un poco casi, un poco :D

Cita:

Empezado por Al González (Mensaje 395545)
Código:

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

Cita:

Empezado por D-MO (Mensaje 395549)
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

Cita:

Empezado por Al González (Mensaje 395550)
...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
Código:

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
Código:

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:

Código:

~/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

1 Archivos Adjunto(s)
Cita:

Empezado por D-MO (Mensaje 395538)
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


La franja horaria es GMT +2. Ahora son las 00:58:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi