Parametro como referencia a una variable dentro de una función en python 3

publicado por: Anonymous

He estado buscando pero no he podido encontrar como puedo hacer referencia a una variable desde una función de este modo:

def variable(nombre):
    saludo = "Hola"
    despedida = "Adios"
    print(nombre)

cuándo llame a la función variable quiero hacer referencia a cualquiera de ambas variables y que me imprima su contenido de este modo variable(saludo) o variable(despedida) pero no me funciona, se que existen otros métodos pero quisiera hacerlo de este modo si es posible ¿cómo podría lograrlo?

Por ejemplo tengo esta forma, que no me vale para el código que estoy haciendo (por cuestión de funcionalidad, legibilidad y extensión de código):

def variable(nombre):
    saludo = "Hola"
    despedida = "Adios"
    if nombre == 'saludo':
        nombre = saludo
    elif nombre == 'despedia':
        nombre = despedida
    print(nombre)

Un saludo y gracias.

solución

Si declaras las variables saludo y despedida dentro de la función variable, no es posible hacer referencia a ellas desde un ámbito superior al de dicha función. Pero hay varias alternativas que se aproximan a lo que buscas.

La forma más sencilla es declarar las variables fuera de la función:

saludo = "Hola"
despedida = "Adios"
def variable(nombre):
    print(nombre)

variable(saludo) # Hola
variable(despedida) # Adios

Puedes crear un diccionario y pasar a la función la clave de la entrada. Si no existe en el diccionario, se imprime la cadena pasada:

dic = {"saludo" : "Hola" , "despedida" : "Adios"}
def variable(nombre):
    print(dic.get(nombre, nombre))

variable("saludo") # Hola
variable("despedida") # Adios
variable("otra cosa") # otra cosa

Creo que esta es la opción más elegante. Pero si de verdad necesitas definir las variables localmente en la función, puedes utilizar la función eval para evaluar una expresión. Puedes pasar el nombre de la variable como una cadena y evaluarla:

def variable(nombre):
    saludo = "Hola"
    despedida = "Adios"
    print(eval(nombre))

variable("saludo") # Hola
variable("despedida") # Adios
variable("'otra cosa'") # otra cosa

Nótese que para pasar una cadena directamente habría que encerrarla entre dos comillas para que al evaluar la cadena devuelva otra cadena.

De todas formas te recomendaría que utilices la opción del diccionario.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *