我已经读了一些关于这个主题的其他问题,但我似乎仍然没有得到python全局变量的工作。
我有三个文件:main.py, menu.py和game.py。menu.py包含一个由main执行的菜单函数;main的主循环有一个"running"变量,我希望其他文件中的函数能够将其设置为0,以便退出游戏。
但是我不能让它工作;例如,如果我这样做:
menu.py
...
class gameMenu():
def __init__(self, screen, background):
#self.event = event
global running
...
running = 0
main.py
...
from menu import *
...
global running
running = 1
title = gameMenu(screen, background)
title.run()
...
print running
但是,main总是打印1。我怎么能得到菜单修改运行变量在主要?
同样,在菜单循环中,我有这个函数:
for e in pygame.event.get():
if e.type == pygame.QUIT:
print 'Close!'
self.isRunning = 0
running = 0
if e.type == pygame.JOYBUTTONDOWN:
print 'Button Down!'
self.isRunning = 0
这段代码在另一个程序中工作得很好,但在这个程序中,第二个if永远不会执行,老实说,我不明白为什么。
如果你需要完整的代码,它在这里:http://dumptext.com/KuwcaWpH
谢谢你的帮助。
在您的代码中,您没有将全局变量running
从main.py
导入menu.py
。-
if e.type == pygame.QUIT:
print 'Close!'
self.isRunning = 0
running = 0
您只是将本地名称(变量)设置为0,这不会影响main.py
中的running
变量。您可能希望将以下行添加到函数的开头—def run(self):
def run(self):
global running
self.isRunning = 1
此外,似乎您在main.py
中定义了running = 1
,这可以遮蔽您想要从menu.py
导入的running
全局变量。试着去掉那条线。或者最好是这样做-
import menu
然后访问全局变量- menu.running
Python中的Global
变量实际上只在单个文件的作用域中。该关键字用于允许局部作用域(如函数和循环)将值赋给更大作用域的变量。
当从一个文件到另一个文件时,导入才是你真正想要使用的。导入允许您查看来自另一个脚本的变量,而不仅仅是函数和对象。它也允许你分配给它们。虽然这些赋值不会影响保存在驱动器上的脚本,但它可以改变像running
这样的值。
所以你可以写
from menu import running
然后检查并赋值。或者,如果您只是使用import menu
,请参考running
与menu.running
。