如果我有这个:
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)
的情况下执行此操作吗?
一种方法是让
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()
Python 中的一切都被视为对象,因此函数也是对象。所以你也可以使用这个方法。
def fun1():
fun1.var = 100
print(fun1.var)
def fun2():
print(fun1.var)
fun1()
fun2()
print(fun1.var)
最简单的选择是使用全局变量。 然后创建一个获取当前单词的函数。
请注意,要读取函数内的全局变量,您不需要需要使用
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
这样做的好处是,也许你的函数位于不同的模块中并且需要访问变量。
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)
def oneFunction(lists):
category=random.choice(list(lists.keys()))
word=random.choice(lists[category])
return word
def anotherFunction():
for letter in word:
print("_",end=" ")
所以我继续尝试去做我想到的事情 您可以轻松地使第一个函数返回单词,然后在另一个函数中使用该函数,同时在新函数中传递相同的对象,如下所示:
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)
def abc():
global x
x = 4 +5
return x
def klm():
y = x + 5
print(y)
当我们想在另一个函数中使用一个函数变量时,我们可以简单地使用“global”关键字。 注意:这只是一个简单的用法,但是如果你想在类环境中使用它,那么你可以参考上面的答案。
解决方案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()