Вызывающая переменная, определенная внутри одной функции из другой функции
если у меня есть это:
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=" ")
Я уже определил lists
, so oneFunction(lists)
отлично работает.
моя проблема-это вызов word
в строке 6. Я попытался определить word
вне первой функции с тем же word=random.choice(lists[category])
определение, но это делает word
всегда одно и то же, даже если я звоню oneFunction(lists)
.
Я хочу иметь возможность, каждый раз, когда я вызываю первую функцию, а затем вторую, иметь другой word
.
могу я сделать это без определения того word
за пределами oneFunction(lists)
?
4 ответов
Да, вы должны подумать об определении как вашей функции в классе, так и сделать word членом. Это чище
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=" ")
как только вы создадите класс, вы должны создать его экземпляр для объекта и получить доступ к функциям-членам.
s = Spam()
s.oneFunction(lists)
s.anotherFunction()
другим подходом было бы сделать oneFunction
верните слово, чтобы вы могли использовать oneFunction
вместо слова anotherFunction
>>> def oneFunction(lists):
category=random.choice(list(lists.keys()))
return random.choice(lists[category])
>>> def anotherFunction():
for letter in oneFunction(lists):
print("_",end=" ")
и, наконец, вы также можете сделать anotherFunction
, примите слово как параметр который вы можете пройти из результата вызова oneFunction
>>> def anotherFunction(words):
for letter in words:
print("_",end=" ")
>>> anotherFunction(oneFunction(lists))
все в python рассматривается как объект, поэтому функции также являются объектами. Таким образом, вы также можете использовать этот метод.
def fun1():
fun1.var = 100
print(fun1.var)
def fun2():
print(fun1.var)
fun1()
fun2()
print(fun1.var)
самый простой вариант-использовать глобальную переменную. Затем создайте функцию, которая получает текущее слово.
current_word = ''
def oneFunction(lists):
global current_word
word=random.choice(lists[category])
current_word = word
def anotherFunction():
for letter in get_word():
print("_",end=" ")
def get_word():
return current_word
преимущество этого заключается в том, что, возможно, ваши функции находятся в разных модулях и нуждаются в доступе к переменной.
def anotherFunction(word):
for letter in word:
print("_", end=" ")
def oneFunction(lists):
category = random.choice(list(lists.keys()))
word = random.choice(lists[category])
return anotherFunction(word)