¿Cómo devolver un valor desde una función?

Sí, he leído un montón de ejemplos sobre esto, pero todavía no lo entiendo.

Estoy aprendiendo Python e hice este script para ayudarme a entender cómo “regresar”:

def random_number(): random = 0 random = (random + 5) * 10 return random def calc_pay_rise(): payrise = 5 random_number() payrise = payrise + random print payrise calc_pay_rise() 

Espero la salida de 55. En su lugar, aparece el error: ‘nombre global’ aleatorio ‘no está definido’. Creo que definí qué aleatorio está en la función random_number () sin embargo.

¿Hay una manera de pasar el valor de random a la función calc_pay_rise ()?

En calc_pay_rise , está desechando el valor devuelto por la llamada random_number() ; en su lugar, haz randmom = random_number() . Lo que has entendido mal es cómo funcionan las variables: las variables locales en una función (por ejemplo, def random_number ) no son visibles en otras funciones (por ejemplo, def calc_pay_rise ).

 def random_number(): random = 0 # not sure what's the point of this return (random + 5) * 10 def calc_pay_rise(): return 5 + random_number() calc_pay_rise() 

También he reducido el código eliminando todas las cosas que no hacen nada.

PD: si el código se reduce realmente al mínimo absoluto, no te queda nada, porque en su forma actual, el código no hace absolutamente nada:

 def random_number(): random = 0 # not sure what's the point of this return (random + 5) * 10 # is the same as def random_number(): return 50 

y

 def calc_pay_rise(): return 5 + random_number() # is the same as def calc_pay_rise(): return 5 + 50 # because random_number always returns 50 

y

 calc_pay_rise() # is really just the same as writing 5 + 50 # so you're not doing anything at all with that value, so you might as well eliminate the call, because it has no side effects either. 

necesitas establecer una variable llamada “random”

por lo que su función calc_pay_rise debería verse como:

 def calc_pay_rise(): payrise = 5 random = random_number() payrise = payrise + random print payrise 

Prueba esto:

 payrise = payrise + random_number() 

Cuando llama a una función que devuelve un valor (un número aleatorio en este caso), se supone que debe hacer algo con el valor devuelto.

También random_number() en cuenta que la variable random que se definió localmente dentro de random_number() no puede ser “vista” desde otras funciones, a menos que declare una nueva variable localmente, pero puede tener el nombre que desee. Otra forma de decir lo mismo sería:

 random = random_number() # can be any name, I'm using `random` again payrise = payrise + random 

su variable “random” en def calc_pay_rise () nunca fue asignada. Tratar:

 def calc_pay_rise(): payrise = 5 random = random_number() payrise = payrise + random print payrise 

No soy un progtwigdor de Python, pero esto parece ser un problema de scope. Definió la variable “aleatoria” pero su scope, la sección del código donde está visible y utilizable, se limita a la función donde la define. En este caso, dentro de la función random_number ().

No es visible dentro de la función calc_pay_rise ().
Lo que es visible es la otra función , random_number () en sí. Eso es lo que necesitas usar en tu adición.

Ese es el punto básico de la devolución de valores.