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

问题描述 投票:0回答:8

如果我有这个:

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
定义来定义
word=random.choice(lists[category])
,但这使得
word
始终相同,即使我调用
oneFunction(lists)

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

word

我可以在不定义

word
之外的
oneFunction(lists)
的情况下执行此操作吗?

python function variables
8个回答
81
投票

一种方法是让

oneFunction
返回单词,以便您可以在
oneFunction
中使用
word
代替
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()

34
投票

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

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

def fun2():
    print(fun1.var)

fun1()
fun2()

print(fun1.var)

9
投票

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

请注意,要读取函数内的全局变量,您不需要需要使用

global
关键字。但是,要写入到函数内的全局变量,您必须必须在函数内的变量声明前面使用
global
关键字,否则函数将认为它是一个单独的局部变量,并且当你写入全局变量时不更新它。

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

这样做的好处是,也许你的函数位于不同的模块中并且需要访问变量。


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)

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

0
投票

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

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)

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

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

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


0
投票

解决方案1:

将变量定义为全局变量,然后打印第二个脚本中的变量值。例如:

python_file1.py
x = 20

def test():
  global x
  return x
test()

python_file2.py
from python_file1 import *
print(x)

解决方案2:

当函数 1 中的变量未预定义时,此解决方案非常有用。在这种情况下,需要将第一个 python 文件的输出存储在第二个 python 文件的新变量中。例如:

python_file1.py
def add(x,y):
    return x + y


if __name__ =="__main__"
add(x=int(input("Enter x"),y = int(input("Enter y"))

python_file2.py
from python_file1 import * 
# Assign functions of python file 1 in a variable of 2nd python file
add_file2 = add(5,6)

def add2()
  print(add_file2)

add2()
© www.soinside.com 2019 - 2024. All rights reserved.