37

如果我有这个:

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,所以oneFunction(lists)效果很好。

我的问题是word在第 6 行调用。我试图word在第一个函数之外定义相同的word=random.choice(lists[category])定义,但这word总是相同的,即使我调用oneFunction(lists).

我希望能够,每次我调用第一个函数然后调用第二个函数时,都有一个不同的word.

我可以在不定义word之外的情况下做到这一点oneFunction(lists)吗?

4

6 回答 6

71

一种方法是oneFunction返回单词,以便您可以使用oneFunction而不是wordin 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接受word作为参数,您可以从调用结果中传递该参数oneFunction

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

最后,您可以在一个类中定义两个函数,并创建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()
于 2012-04-13T11:26:35.197 回答
29

python中的一切都被视为对象,因此函数也是对象。所以你也可以使用这个方法。

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

def fun2():
    print(fun1.var)

fun1()
fun2()

print(fun1.var)
于 2017-08-21T06:32:34.433 回答
4

最简单的选择是使用全局变量。然后创建一个获取当前单词的函数。

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

这样做的好处是你的函数可能在不同的模块中并且需要访问变量。

于 2017-04-04T16:04:52.573 回答
3
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)
于 2017-01-10T09:12:18.813 回答
1
def oneFunction(lists):
    category=random.choice(list(lists.keys()))
    word=random.choice(lists[category])
    return word

def anotherFunction():
    for letter in word:             
        print("_",end=" ")
于 2020-09-28T06:56:37.313 回答
-1

所以我继续尝试做我想到的事情您可以轻松地使第一个函数返回单词,然后在另一个函数中使用该函数,同时在新函数中传入相同的对象,如下所示:

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

def anotherFunction(sameList):
    for letter in oneFunction(sameList):             
        print(letter)
于 2021-06-17T19:10:30.560 回答