我有以下代码
cmd = raw_input("> ")
if cmd[0] == "/":
if " " in cmd:
cmd = cmd.split(" ")
{
'/help': help,
'/cf': cf(f = cmd[1]),
'/rf': rf(f = cmd[1]),
'/md': md(f = cmd[1]),
'/rd': rd(f = cmd[1]),
'/dir': dir(f = cmd[1]),
'/tree': tree(f = cmd[1]),
'/date': date,
'/time': time_,
'/clear': clear,
'/echo': echo(f = cmd[1]),
}.get(cmd[0])()
出于某种原因,如果我打电话,比方说,/ md,就像我打电话给/ cf那样运行它,任何人都可以提供任何见解吗?
我的整个代码可以在这里找到:https://pastebin.com/ukwY6LfV
答案 0 :(得分:1)
如果不深入研究你的代码,我可以告诉你,你的结构看起来很奇怪...看看你的dict中的第二行,'/cf': cf(f = cmd[1]),
你在那里调用func cf(),然后可能最后再次使用}.get(cmd[0])()
再次调用它。我看到你也试图将f设置为参数。但我不认为你想在第一个实例中调用func。相反,你只需要func的“指针”,即func名称。
既然你试图传递一个arg,我认为lambda语句就是你想要的。所以,尝试改变:
'/cf': cf(f = cmd[1]),
到
'/cf': lambda p=cmd[1]: cf(f = p),
看看是否有诀窍。使用lambda调用,你实际上并没有调用cf()函数,而是你正在创建一个新的无名函数,如果被调用,它将稍后用所需的参数调用cf()函数。
/ date,/ time和/ clear的行应该没问题,但是你需要更改“dict”语句中的所有其他行来使用lambda调用。