Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/08/2010, 09:43
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: duda con paso de parámetros(referencia, valor)

Bueno eso es por que python no tiene propiamente variables si no que tiene "nombres" o "identificadores"

Ejemplo:
Código Python:
Ver original
  1. a = 1 #Uno tiene el nombre de a
  2. a = 2 #Ahora 2 tiene el nombre de a
  3. b = a #Ahora 2 tiene el nombre de a y b
  4. #Hasta aquí probablemente lo encuentres absurdo
  5. #Asi que veamos otro ejemplo
  6. a = [1, 2, 3] #Esta lista tiene el nombre de a
  7. b = a #Ahora la lista tiene el nombre a y b
  8. b.append(4) #La lista queda [1, 2, 3, 4], nota que esta operación es in-place
  9. #Como la lista tiene los nombres a y b entonces
  10. print a
  11. >>> [1, 2, 3, 4]
  12. print b
  13. >>> [1, 2, 3, 4]

Veamos varios casos para comprender que pasa.

Código Python:
Ver original
  1. def foo(bar):
  2.     #hasta este punto bar = 3, 3 tiene el nombre de bar
  3.     bar = 1 #Ahora 1 tiene el nombre de bar (local), esta no es una operación in-place
  4.  
  5. bar = 3 #Bar en alcance global
  6. foo(bar) #Pasamos Bar como parametro

Código Python:
Ver original
  1. def foo(bar):
  2.     bar.append(1) #Agregamos 1 a bar, operación in-place
  3.  
  4. bar = [] #ahora bar es una lista
  5. foo(bar) #Pasamos a bar como parámetro

Código Python:
Ver original
  1. def foo():
  2.     bar = 1 #Creamos un bar (local) = 1
  3.  
  4. bar = 2 #Bar (global) = 2
  5. foo() #Llamamos a foo

Código Python:
Ver original
  1. def foo():
  2.     global bar #Decimos que vamos a trabajar con bar (global)
  3.     bar = 1 #A uno le ponemos el nombre de bar (global)
  4.  
  5. bar = 2 #Bar (global) igual a 2
  6. foo() #Llamamos a foo