请帮助我理解为什么这不起作用以及如何改变它。 我基本上希望能够从程序2中查询一个程序变量的值。所以这里是最基本的程序:
P1:
import time
gscore = 0
def get_info():
return gscore
def main():
global gscore
score = 0
while score <10:
time.sleep(1)
score +=1
gscore = score
print(score)
if __name__ == '__main__':
main()
P2:
from functest import get_info
print(get_info())
结构可能看起来有点奇怪,但基本上我有一个现有的小型python游戏,并希望能够查询得分,这就是我以这种方式调整它的原因。因此P1显然计为10,但P2总是得到0作为返回值。我觉得我在这里犯了一个非常愚蠢的错误...... 请求帮助:)
答案 0 :(得分:1)
当您在Python中import
模块时,您没有执行它的内容。
if __name__ == "__main__":
就是为了让你的Python文件既可以作为可重用模块,也可以作为独立程序。
如果你想执行main()
功能,你需要明确地调用它。:
from functest import main, get_info
main() # calling the main function in your functest file
print(get_info()) # calling the get_info function
这将返回您要查找的值。
现在,如果您执行 functest.py 文件,将调用main
:
$ python functest.py
#=> 9
答案 1 :(得分:1)
如果__name__ == '__main__'
仅在从shell运行代码时执行,而不是从其他程序导入程序时执行。要解决此问题,您可以将程序修改为:
在你P1中将get_info修改为:
def get_info():
global gscore
return gscore
在P2中执行此操作:
from functest import main, get_info
main()
print(get_info())
另外,请注意,使用类而不是创建全局变量有更好的方法来执行您正在执行的操作。
class Score(object):
def __init__(self, gscore=0):
self.gscore = gscore
def get_info(self):
return self.gscore
def increment(self, score=0):
while score < 10:
score +=1
self.gscore = score
答案 2 :(得分:0)
导入其他程序的功能时,您将导入程序的功能,而不是程序的实际实例。我的意思是你的程序在运行时只计算到10,但10不是代码的一部分,它是一个结果。
导入它的内容是运行您导入的一些代码(在您的情况下,运行get_info
代码,gscore = 0
为返回的gscore
,但是,这是您的其他程序的一个独特实例,因此即使gscore
在您使用main方法运行的另一个程序中增加,您的第二个程序也拥有它{{1}那就是gscore
。当您想要访问的程序中有一种函数库时,导入更多。
你想要的是能够,运行时间,读取其他程序生成的值。这不能用python变量完成,但可以通过许多其他方式完成。一种常见的方法是将分数写入文件,然后在其他程序中读取该文件。如果您需要有关如何读取和写入文件的信息,请阅读this guide here。