Ir al contenido principal

8.11. Alias (poner sobrenombres)

Como las variables apuntan a objetos, si asigna una variable a otra, ambas variables se refieren al mismo objeto:

   1: >>> a = [1, 2, 3]
   2: >>> b = a

En este caso, el diagrama de estados sería como este:


Sin título


Como la misma lista tiene dos nombres diferentes, a y b, podemos decir que se le ha puesto un alias. Los cambios hechos a un alias afectan al otro:




   1: >>> b[0] = 5
   2: >>> print a
   3: [5, 2, 3]

Aunque este comportamiento puede ser útil, a veces es inesperado o indeseable.
En general, es mas seguro evitar los alias cuando trabajemos con objetos mutables. Por supuesto, no hay problema con los objetos inmutables. Por ello Python se toma la libertad de poner alias a las cadenas cuando ve una oportunidad de economizar.

Comentarios

Entradas populares de este blog

C.3. Cartas, mazos y juegos Python

1: import random 2:class Carta: 3: listaDePalos = ["Tr¶eboles", "Diamantes", "Corazones", 4:"Picas"] 5: listaDeValores = ["nada", "As", "2", "3", "4", "5", "6", "7", 6:"8", "9", "10", "Sota", "Reina", "Rey"] 7: 8: def __init__(self, palo=0, valor=0): 9: self.palo = palo 10: self.valor = valor 11: def __str__(self): 12:return (self.listaDeValores[self.valor] + " de " +\ 13: self.listaDePalos[self.palo]) 14: def __cmp__(self, otro): 15: # controlar el palo 16:if self.palo > otro.palo: return 1 17:if self.palo < otro.palo: return -1 18: # si son del mismo palo, controlar el valor 19:if self.valor > otro.valor: return 1 20:if self.valor < otro.valor: return -1 21: # los valores son iguales, es…

B.3. Algoritmo de Euclides Python

En el ejemplo anterior, computamos la suma de 5=6 + 5=6 y obtuvimos 60=36. Es correcto, pero no es la mejor forma de representar la respuesta. Para reducir la fracción a su expresión mas simple, hemos de dividir el numerador y el denominador por el máximo común divisor (MCD) de ambos, que es 12. El resultado sería 5=3. En general, siempre que creamos un nuevo objeto Fracción, deber³amos reducirlo dividiendo el numerador y el denominador por el MCD de ambos. Si la fracción ya esta reducida, el MCD es 1.
Euclides de Alejandr³a (aprox. 325{265 a. C.) presento un algoritmo para encontrar el MCD de dos números enfermos m y n: Si n divide a m sin resto, entonces n es el MCD. De lo contrario, el MCD es el MCD de n y el resto de dividir m entre n. Esta definición recursiva puede expresarse concisamente como una función:
1: def mcd (m, n): 2:if m % n == 0: 3:return n 4:else: 5:return mcd(n, m%n)


En la primera l³nea del cuerpo, usamos el operador de modulo para comprobar la divisibili…

3.11. Diagramas de pila

Para mantener el rastro de que variables pueden usarse y donde, a veces es útil dibujar un diagrama de pila. Como los diagramas de estado, los diagramas de pila muestran el valor de cada variable, pero también muestran la función a la que cada variable pertenece.Cada función se representa por una caja con el nombre de la función junto a el. Los parámetros y variables que pertenecen a una función van dentro. Por ejemplo, el diagrama de stack para el programa anterior tiene este aspecto:El orden de la pila muestra el flujo de ejecución. imprimeDoble fue llamado por catDoble y a catDoble lo invoco __main__ , que es un nombre especial de la función mas alta. Cuando crea una variable fuera de cualquier función, pertenece a main
En cada caso, el parámetro se refiere al mismo valor que el argumento correspondiente. Así que parte1 en catDoble tiene el mismo valor que cantus1 en main .Si sucede un error durante la llamada a una función, Python imprime el nombre de la función y el nombre de la f…