Вызов переменной, определенной внутри одной функции из другой функции

если у меня есть это:

<code>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=" ")
</code>

Я уже определилlists, такoneFunction(lists) работает отлично.

Моя проблема звонитword в строке 6. Я попытался определитьword за пределами первой функции с тем жеword=random.choice(lists[category]) определение, но это делаетword всегда одинаково, даже если я позвонюoneFunction(lists).

Я хочу, чтобы каждый раз, когда я вызываю первую функцию, а затем вторую,word.

Могу ли я сделать это без определения этогоword внеoneFunction(lists)?

 Lev Levitsky13 апр. 2012 г., 13:24
Почему бы не пройтиword в качестве аргументаanotherFunction? Рассматриватьdef anotherFunction(word): и называть это соответственно.

Ответы на вопрос(4)

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)
 10 янв. 2017 г., 10:14
Вы можете передать переменную слова из первой функции «oneFunction» к другой функции. Тем не менее, я полагаю, что сначала нужно поместить другую функцию, чтобы не было ошибки, "другая функция не определена". Кроме того, я заметил, что вы ничего не делаете с «письмом»; переменная, на которую вы ссылались в цикле for

Все в 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

Преимущество этого состоит в том, что, возможно, ваши функции находятся в разных модулях и нуждаются в доступе к переменной.

Решение Вопроса

Да, вам следует подумать об определении как вашей функции в классе, так и о том, чтобы сделать слово членом. Это чище

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))
 JNat♦13 апр. 2012 г., 13:45
питон говорит мнеself не определяется ... почему это? мне нужно импортировать какой-то модуль раньше или что-то?
 JNat♦13 апр. 2012 г., 13:32
благодарю вас! При первом подходе, не могли бы вы объяснить, что именноself часть делает? Это аргумент для функции?
 JNat♦13 апр. 2012 г., 13:48
Я определил класс с двумя функциями внутри него, но при вызове первой функции (Spam.oneFunction(self,lists)) он говорит мнеself не определено...
 13 апр. 2012 г., 13:46
@JNat: Вы должны сделать класс, так же, как я показал в примере. Я думаю, что вам не нравится OO, поэтому я обновлю свой ответ, чтобы добавить больше деталей.
 13 апр. 2012 г., 13:34
@JNat:self дает ссылку на текущий объект, очень похоже на то, чтоthis (указатель) илиthis (переменная) служит в известных ООП Языки.

Ваш ответ на вопрос