Cuando escribo el código Python mysuff.append(‘hello’), en realidad se están desencadenando una serie de procesos dentro de Python para que suceda algo a la lista mystuff. Así funciona:
- Python ve que indiqué mystuff y revisa esa variable. Puede que revise si anteriormente se creó con un =, si se trata de un parámetro de una función o si es una variable global. En cualquier caso, tiene que encontrar donde aparece por primera vez mystuff.
- Una vez encuentra mystuff, llega al operador . (punto) y empieza a revisar las variables que son parte de mystuff. Desde el momento que sabe que mystuff es una lista, también sabe que tiene muchas funciones asociadas.
- Luego encuentra append y lo compara con todas las funciones y variables de mystuff. Si append está ahí, la usa.
- A continuación, Python ve los paréntesis y dice «¡Oh! Ésto debe de ser una función». En ese momento, llama o ejecuta la función con un parámetro extra.
- El parámetro extra es…¡¡mystuff!! Lo sé, es raro, ¿verdad? Pero así es como funciona Python, así que lo mejor es simplemente recordarlo y asumir que eso es lo correcto. Lo que ocurre es que la llamada a la función, en el fondo se procesa de una forma similar a append (mystuff, ‘hello’), en lugar de mystuff.append(‘hello’).
No es necesario saber que ésto está pasando pero me será de ayuda para cuando tenga mensaje de error como éste:
>>> class Thing(object) :
… def test (hi) :
… print «hi»
…
>>> a = Thing ()
>>> a.test («hello»)
Traceback (most recent call last):
File «<stdin>», line 1, in <module>
TypeError: test () takes exactly 1 argument (2 given)
>>>
Más adelante lo veré, pero el error significa que Python cambió a.test(«hello») por test(a,»hello») y que en algún lugar alguien se confundió y no añadió el argumento o parámentro para a.
Dedicaré algunos ejercicios para que éste concepto quede claro. Haré éste ejercicio que mezcla cadenas y listas para divertirme un poco.
PREGUNTAS
P: ¿No dijimos que no era recomendable usar bucles while?
R: Las reglas se pueden romper si tienes una buena razón. No hay que ser esclavos de las reglas.
P: ¿Qué hace stuff[3:5]?
R: Obtiene una parte de la lista, del elemento 3 al 4, lo que significa que no incluye el 5. Es similar a como funciona range (3,5). Aunque no es lo mismo, ¿eh?. Con stuff[3:5] se obtiene una sublista de stuff, tenga lo que tenga, range sólo devuelve números.
P: ¿Por qué no funciona join(‘ ‘, stuff)?
R: Esa forma no tiene sentido. No funciona de esa manera, ya que join es un método asociado a una cadena. Reescríbelo así: ‘ ‘.join(stuff).
+ EJERCICIOS
- Toma cada llamada a una función y revísala siguiendo los pasos descritos anteriormente para traducirlo a lo que hace Python. Por ejemplo, ‘ ‘.join(cosas) es join(‘ ‘ , cosas).
- Traduce estas dos formas de ver las llamadas a funciones. Por ejemplo, ‘ ‘.join(cosas) se puede leer como «join cosas aplicado a ‘ ‘ «. Otra forma es «Llamada a join con ‘ ‘ y cosas». En realidad es lo mismo.
- Busca en internet sobre PROGRAMACIÓN ORIENTADA A OBJETOS (OOP).
- Busca que es class en Python, no en otros lenguajes, que puede dar lugar a confusión.
- ¿Cuál es la relación entre dir(algo) y la class de algo?


Debe estar conectado para enviar un comentario.