Foros del Web » Programando para Internet » Python »

duda con paso de parámetros(referencia, valor)

Estas en el tema de duda con paso de parámetros(referencia, valor) en el foro de Python en Foros del Web. Hola lista, tengo una duda de novato con python. ¿Es posible pasar valores por referencia? Según he leído en Internet, en python todos los parámetros ...
  #1 (permalink)  
Antiguo 24/08/2010, 08:03
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 9 meses
Puntos: 27
duda con paso de parámetros(referencia, valor)

Hola lista, tengo una duda de novato con python. ¿Es posible pasar valores por referencia?
Según he leído en Internet, en python todos los parámetros son referencias a objetos, sin embargo no consigo que el valor modificado dentro de una función se refleje en el exterior, y quizás el término "por referencia" al que hacen referencia en Internet explique una situación distinta a la que quiero resolver.

Por ejemplo con este código.
Código PHP:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
def asd(ss):
  
ss 5

ss 
3
asd
(ss)
print 
ss 
La salida es 3, y a mí me gustaría que fuera 5. ¿Cómo puedo hacer esto?.Obviamente es sólo un ejemplo, por que en este caso la manera obvia de lograr que fuera 5 es haciendo un return en la función y asignar este valor a "ss", o bien declarar a "ss" como global.

Espero puedan resolver esta duda. Saludos.
  #2 (permalink)  
Antiguo 24/08/2010, 08:52
AxL456
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: duda con paso de parámetros(referencia, valor)

Cita:
Iniciado por refreegrata Ver Mensaje

La salida es 3, y a mí me gustaría que fuera 5. ¿Cómo puedo hacer esto?.Obviamente es sólo un ejemplo, por que en este caso la manera obvia de lograr que fuera 5 es haciendo un return en la función y asignar este valor a "ss", o bien declarar a "ss" como global.

Espero puedan resolver esta duda. Saludos.

mmm pues ya te has respondido, las unicas dos maneras es o declarar la variable como global, o hacer un return para modificar la variable..

Cuando trabajas dentro de "clases" es un poco distinto, ya que los "def" tecnicamente no se les llama "funciones" sino "metodos" y debido a que se les pasa el argumento "self" puedes modificar desde el bloque interno de un metodo, alguna variable global de la clase, pero eso es otro cuento..
  #3 (permalink)  
Antiguo 24/08/2010, 09:43
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
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

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:39.