字典的可变范围问题

时间:2015-07-03 20:40:13

标签: python variables python-3.x dictionary scope

所以我正在创建一个终端程序,允许您创建帐户并登录/注销它们。成功登录后,它会返回用户会话功能并循环,同时要求用户输入命令。我想创建一个命令字典,并将所有命令映射到一个函数,该函数执行我想要该命令执行的操作。我的问题是,一些函数依赖于找出当前的用户会话,但是用户名变量范围只在用户会话函数中,所以一旦从字典运行该函数,我需要能够获取当前用户变量并使用它作为命令字典中函数的参数。我只发布了与此问题相关的代码部分。如果您需要查看整个代码,或有任何疑问,请告诉我。谢谢你的帮助。

commands = {
    "view mail": view_mail(),
    "send mail": send_mail(),
    "logout": True
}

def session(currentuser):
    print("Commands: view mail | send mail | logout")
    while True:
        option = input("> ")
        if option in commands:
            end_session = commands[option]
            if end_session:
                break
        else:
            print(option + " is not an option")

1 个答案:

答案 0 :(得分:3)

在声明字典时调用函数,尝试将它们存储在commands的声明中:

commands = {
    "view mail": view_mail,
    "send mail": send_mail,
    "logout": lambda u: True
}

在运行时传递用户名:

end_session = commands[option](username)

编辑: 那么如果某些函数不带参数呢?您可以使用虚拟参数(例如上面的lambda)来破解它,或者更好的是,使用签名包含所有函数:def fun_name(*args):

*args是Python中常见的习语,表示参数解包。事情是,它可以是空的,也可以包含许多参数。

def multi(*args):
    p1, p2, p3 = args

def noargs(*args):
    pass

multi(1,2,3)
noargs()