我目前正在开发一个小命令行程序,该程序从网站解析电视节目,用户可以在其上调用不同的功能。我将函数存储在字典中,如下所示:
commands = {"show": show, "show x": showX, "help": TVhelp, "exit": TVexit,
"actor list": actorList, "actor add x": actorAdd,
"actor delete x": actorDel, "recommend": recommend}
当用户键入任何键时,将调用存储为该键值的函数。例如show只显示所有程序的列表,帮助和退出应该是自我解释。
当从命令行调用这些函数时,我只是使用裸函数名称时没有任何问题,但问题是某些函数需要额外的参数(我在这里称之为x)。当用户例如写出"显示20"应显示程序列表中带有索引20的程序。或当输入是"演员添加阿诺德施瓦辛格"该名称应添加到列表中。
我想要的是可以从命令行调用该函数并附加一个参数,程序识别输入中的函数名称并将数字或actor名称作为参数。
有一种pythonic方法用字典做到这一点吗?
欢呼声
答案 0 :(得分:1)
首先,我建议您使用argparse。 API很复杂但很有效。
如果你真的想要自己进行参数解析,只需将任何其他参数传递给字典中指定的函数。
def zoo_desc(args):
y = int(args[2])
describe_me = zoo[y]
print ('{}, {}'.format(describe_me[0], describe_me[1]))
def zoo_list(args):
for index, entry in enumerate(zoo):
print ('{}: {}'.format(index, entry[0]))
handlers = {
'zoo list': zoo_list, # List the animals in the zoo.
'zoo desc': zoo_desc # Describe the indexed animal, aka 'zoo desc x'
}
zoo = [
('cat', 'a cute feline'),
('mouse', 'a cute rodent'),
('rat', 'an uncute rodent')
]
x = input()
while (x):
for a in handlers:
if x.startswith(a):
handlers[a](x.split()) # When we call a handler, we also pass it the arguments
x = input()
输出:
zoo list
0: cat
1: mouse
2: rat
zoo desc 1
mouse, a cute rodent