2015-07-03 103 views
-2

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

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") 

回答

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() 
+0

加上一个使用拉姆达。我目前从未想到这一点。 –

+0

现在如果其中一个命令没有任何参数会怎么样。或者其中一个命令需要多个参数。这会是一个问题。 –

+0

@banana:见编辑 – cdarke