我有以下代码
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
无需更深入地查看您的代码,我可以告诉您您的结构看起来很奇怪...查看字典中的第二行,'/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 调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句