Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我需要帮助理解为什么返回值与我期望的不同。我正在使用cmd模块_Python_Cmd - Fatal编程技术网

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