Python 我需要帮助理解为什么返回值与我期望的不同。我正在使用cmd模块
我有两个文件要处理Python 我需要帮助理解为什么返回值与我期望的不同。我正在使用cmd模块,python,cmd,Python,Cmd,我有两个文件要处理menu.py具有导入program.py的菜单 menu.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
menu.py
具有导入program.py
的菜单
menu.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()
我希望当program.py进入print user
时,它会打印lilith
,但它不会打印任何人。为什么会这样postloop()
在中定义为当cmdloop()
即将返回时执行的方法,因此我认为它会将user
的值返回为lilith
,然后打印lilith
,但它只打印没有人
编辑:建议我不要使用globals。我正在阅读以找出原因。这是因为分配给用户的任务在这里:
def postloop(self):
user = 'lilith'
return user
正在作用于变量的本地实例。要影响全局变量用户
,您需要添加:
global user
到该功能的顶部。虽然我不推荐它,因为通常有比使用globals更好的方法
关于globals和python的一点说明。如果没有global
关键字,就无法为全局变量赋值,但是如果没有它,就可以读取全局(和其他非本地)范围。这允许您进行闭包。这是因为分配给用户的任务在这里:
def postloop(self):
user = 'lilith'
return user
正在作用于变量的本地实例。要影响全局变量用户
,您需要添加:
global user
到该功能的顶部。虽然我不推荐它,因为通常有比使用globals更好的方法
关于globals和python的一点说明。如果没有global
关键字,就无法为全局变量赋值,但是如果没有它,就可以读取全局(和其他非本地)范围。这允许您创建闭包。cmd
与此无关user='lilith'
引入了一个新的本地绑定。要重新绑定全局名称,需要执行以下操作:
global user
user = 'lilith'
此外,您应该避免使用全局变量。cmd
与此无关user='lilith'
引入了一个新的本地绑定。要重新绑定全局名称,需要执行以下操作:
global user
user = 'lilith'
另外,你应该避免使用globals