Ej. 38 : Practicando con listas…

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:

  1. 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.
  2. 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.
  3. Luego encuentra append y lo compara con todas las funciones y variables de mystuff. Si append está ahí, la usa.
  4. 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.
  5. 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.

Ej. 38 - Editor Ej. 38 - Terminal

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

  1. 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).
  2. 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.
  3. Busca en internet sobre PROGRAMACIÓN ORIENTADA A OBJETOS (OOP).
  4. Busca que es class en Python, no en otros lenguajes, que puede dar lugar a confusión.
  5. ¿Cuál es la relación entre dir(algo) y la class de algo?

Ej. 6 : Haciendo cadenas…

Aquí voy a profundizar un poco más en las cadenas de caracteres o STRINGs.

Como comento en el ejercicio anterior, una cadena es un pequeño texto que quiero mostrar en pantalla a alguien o «exportar» del programa en el que se escribe. Python sabe  que algo es una cadena cuando se pone un texto entre comillas dobles (» «) o comillas simples (‘ ‘)  y detrás de » print «.

Los strings pueden contener los caracteres de formato vistos en el Ej. 5. Sólo tengo que poner las variables con formato en la cadena y luego el carácter % seguido de la variable. En el caso de que quiera incluir múltiples variables en el string, tengo que separar dichas variables por comas y ponerlas entre paréntesis.

Ex6 Editor Ex6 Terminal

ALGUNAS PREGUNTAS

P: ¿Cuál es la diferencia entre %r y %s?

R:  %r  es mejor para mostrar el programa depurado, los datos de la variable «en bruto«.  Sin embargo usamos %s  para mostrar los datos al usuario.

P: ¿En que lugares una cadena se pone dentro de otra cadena?

R: Ver Ej. 21, línea de código 31.

Ej. 5 : Mostrando variables en pantalla (parte I)…

En éste ejercicio voy a usar variables dentro de una cadena de caracteres. en programación, una cadena (de c) es un texto escrito entre comillas dobles (» «). En inglés es STRING.

Empiezo escribiendo el código:

Ex. 5 - Paso 1

Y al ejecutar, obtengo lo siguiente…Ex. 5 - Paso 2 corregido

ALGUNAS PREGUNTAS

P: ¿Podría crear una variable de la forma 1 = ‘Paloma Cue’ ?

R: No. El 1 no es un nombre válido de variable. Las variables deben comenzar con UNA LETRA.  a1 = Paloma sí funcionaría.

P: ¿Qué son %s, %r y %d ?

R: Son CARÁCTERES DE FORMATO. Es importante. Le dicen a Python que tome una variable que esté situada a la derecha y poga su valor en lugar de %s.

ALGO +DE INFO…

Me voy a la documetación oficial y encuentro ésto tan apropiado…

Caracteres de formato - doc oficial Caracteres de formato 2 - doc oficial

Justo lo que responde a mis preguntas, pero le iré dando vueltas según lo vaya usando.