python 从一个函数调用另一个函数中定义的变量

3npbholx  于 2023-03-06  发布在  Python
关注(0)|答案(7)|浏览(202)

如果我有这个:

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)工作得很完美。
我的问题是在第6行调用word。我曾尝试在第一个函数外部用相同的word=random.choice(lists[category])定义word,但这使得word总是相同的,即使我调用oneFunction(lists)
我希望每次调用第一个函数,然后调用第二个函数时,都有一个不同的word
我可以在不定义oneFunction(lists)之外的word的情况下执行此操作吗?

h7appiyu

h7appiyu1#

一种方法是让oneFunction返回单词,这样就可以在anotherFunction中使用oneFunction而不是word

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()
0x6upsns

0x6upsns2#

python中的所有东西都被认为是对象,所以函数也是对象,所以你也可以使用这个方法。

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

def fun2():
    print(fun1.var)

fun1()
fun2()

print(fun1.var)
tuwxkamq

tuwxkamq3#

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

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

这样做的好处是,您的函数可能位于不同的模块中,需要访问变量。

xcitsw88

xcitsw884#

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)
czq61nw1

czq61nw15#

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

def anotherFunction():
    for letter in word:             
        print("_",end=" ")
0g0grzrc

0g0grzrc6#

所以我继续尝试做我想到的事情你可以很容易地让第一个函数returnthe word然后在 another function 中使用这个函数同时在新函数中传入一个相同的对象,如下所示:

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)
hjqgdpho

hjqgdpho7#

def abc():
    global x
    x = 4 +5 
    return x

def klm():
    y = x + 5
    print(y)

当我们想把一个函数的变量转换成另一个函数时,我们可以简单地使用'global'关键字。这只是一个简单的用法,但是如果你想在类环境中使用它,那么你可以参考上面的答案。

相关问题