¿Cómo utilizar una variable definida dentro de una función desde otra función?
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 word
en la línea 6. Intenté definir word
fuera de la primera función con la misma word=random.choice(lists[category])
definición, pero word
siempre es lo mismo, incluso si llamo oneFunction(lists)
.
Quiero tener una diferente word
cada vez que llamo a la primera función y luego a la segunda.
¿ Puedo hacer esto sin definir eso word
fuera de oneFunction(lists)
?
Un enfoque sería hacer que oneFunction
devuelva la palabra para que pueda usarla oneFunction
en lugar de word
en 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 anotherFunction
aceptar word
como 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 word
en 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()
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)