我有两个文件要处理。menu.py
有program.py
导入的菜单。你知道吗
菜单.py:
import cmd,sys
user = 'no one'
class loginMenu(cmd.Cmd):
def postloop(self):
user = 'lilith'
return user
intro="""login menu"""
def do_smtoggle(self,person):
return True
def do_quit(self,person):
sys.exit()
class storeMenu(cmd.Cmd):
intro="""store menu"""
def do_whoami(self,person):
print 'storemenu ' + user
def do_quit(self,person):
quit = True
return quit
程序.py:
from menu import *
import cmd,sys
lm = loginMenu()
sm = storeMenu()
while True:
lm.cmdloop()
print user
sm.cmdloop()
我想当程序.py到达print user
它将打印lilith
,但它将打印no one
。为什么会这样?postloop()
在docs中定义为当cmdloop()
即将返回时执行的方法,因此我认为它将user
的值返回为lilith
,然后lilith
将被打印,但它只打印no one
。你知道吗
编辑:有人建议我不要使用globals。我在读this来找出原因。你知道吗
这是因为
user
的赋值在这里:作用于变量的本地实例。要影响全局变量
user
,需要添加:到那个函数的顶端。尽管我不推荐它,因为通常有比使用globals更好的方法。你知道吗
关于globals和python的一个注释。如果没有
global
关键字,就不能给全局var赋值,但是如果没有它,就可以读取全局(和其他非本地)作用域。这允许您创建闭包。你知道吗cmd
与此无关。user = 'lilith'
引入了一个新的本地绑定。要重新绑定全局名称,需要执行以下操作:另外,你应该避免使用globals。你知道吗
相关问题 更多 >
编程相关推荐