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