使用.get()python通过函数传递参数

时间:2017-12-02 22:23:42

标签: python

我有以下代码

    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

1 个答案:

答案 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调用。