在字典中声明函数

JPH*_*ett 2 python

def mainProgram(myDict):
    methodDict = {'add': addDB(myDict, params[1], params[2]),
                  'find': findDB(myDict, params[1]),
                  'del': removeDB(myDict, params[1], params[2]),
                  'clear': clearAll(myDict)}
    inpt = None
    while inpt != "End":
        inpt = input("-->")
        params = inpt.split()
        methodDict[params[0]]
Run Code Online (Sandbox Code Playgroud)

这是我的代码,当我尝试执行我得到的代码时,"在赋值之前引用了UnboundLocalError:局部变量'params'"

有可能做我在python中尝试做的事情吗?

Tas*_*lou 6

那么,实际发生了什么

 methodDict = {'add': addDB(myDict, params[1], params[2]),
              'find': findDB(myDict, params[1]),
              'del': removeDB(myDict, params[1], params[2]),
              'clear': clearAll(myDict)}
Run Code Online (Sandbox Code Playgroud)

是你执行 addDB etc,也就是说,你的methodDict将包含addDB(...params...)它运行的结果.

不幸的是它没有运行,因为当执行发生时没有定义params.

你想要做的是,将一个callable存储在字典中并运行它......就像这样

methodDict = {'add': lambda x: addDB(myDict, x[0], x[1])}
# and you execute with
methodDict['add'](params)
Run Code Online (Sandbox Code Playgroud)

  • @AdamSmith我同意.我只想表明你必须在那里有一个可调用而不需要更改代码.事实上,你的更干净,更"适当".我赞成它. (2认同)