¿Cómo utilizar una variable definida dentro de una función desde otra función?

Resuelto JNat asked hace 12 años • 8 respuestas

Si tengo esto:

def oneFunction(lists):
    category=random.choice(list(lists.keys()))
    word=random.choice(lists[category])

def anotherFunction():
    for letter in word:              #problem is here
        print("_",end=" ")

Lo he definido previamente lists, por lo que oneFunction(lists)funciona perfectamente.

Mi problema es llamar worden la línea 6. Intenté definir wordfuera de la primera función con la misma word=random.choice(lists[category])definición, pero wordsiempre es lo mismo, incluso si llamo oneFunction(lists).

Quiero tener una diferente wordcada vez que llamo a la primera función y luego a la segunda.

¿ Puedo hacer esto sin definir eso wordfuera de oneFunction(lists)?

JNat avatar Apr 13 '12 18:04 JNat
Aceptado

Un enfoque sería hacer que oneFunctiondevuelva la palabra para que pueda usarla oneFunctionen lugar de worden anotherFunction:

def oneFunction(lists):
    category = random.choice(list(lists.keys()))
    return random.choice(lists[category])

    
def anotherFunction():
    for letter in oneFunction(lists):              
        print("_", end=" ")

Otro enfoque es anotherFunctionaceptar wordcomo parámetro que puede pasar desde el resultado de la llamada oneFunction:

def anotherFunction(words):
    for letter in words:              
        print("_", end=" ")
anotherFunction(oneFunction(lists))

Y finalmente, podrías definir ambas funciones en una clase y convertirlas worden miembros:

class Spam:
    def oneFunction(self, lists):
        category=random.choice(list(lists.keys()))
        self.word=random.choice(lists[category])

    def anotherFunction(self):
        for letter in self.word:              
            print("_", end=" ")

Una vez que crea una clase, debe crear una instancia y acceder a las funciones miembro:

s = Spam()
s.oneFunction(lists)
s.anotherFunction()
Abhijit avatar Apr 13 '2012 11:04 Abhijit

Todo en Python se considera un objeto, por lo que las funciones también son objetos. Entonces puedes usar este método también.

def fun1():
    fun1.var = 100
    print(fun1.var)

def fun2():
    print(fun1.var)

fun1()
fun2()

print(fun1.var)
Python Learner avatar Aug 21 '2017 06:08 Python Learner