使用字典

时间:2017-01-19 09:58:09

标签: python function dictionary

这是我的代码:

def funcWithParam(param):
    print "Your parameter is: " + param


def justFunction():
    print "No parameters"


def wrong():
    print "wrong choice"


userInput = raw_input("type 'params' for parameters. type 'no' for no parameters: ")


if userInput == "params":
    myparam = "type your parameter: "

else:
    myparam = ""


dic = {
    "params": (funcWithParam(myparam)),
    "no": justFunction,
}

dic.get(userInput,wrong)()

我知道代码是错误的,每次我运行它时," params"正在使用" userInput"执行密钥。串。如果在参数检查中True并且我添加了第二个参数,那么程序将失败说:

  

' NoneType'对象不可调用。

我想知道使用字典使用参数调用函数的正确语法/方法是什么。

2 个答案:

答案 0 :(得分:2)

那是因为你构建了字典,如:

dic = {
    "params": (funcWithParam(myparam)), #here you already call the function
    "no": justFunction, #this is a real function
}

这意味着字典包含"params"的函数,但该函数的结果。如果您稍后从字典中提取"params",则返回None(因为funcWithParam返回None),然后您尝试调用None(如{{1} }})不受支持。

您可以简单地将字典转换为惰性字典:

None()

甚至更优雅:

dic = {
    "params": (lambda : funcWithParam(myparam)),
    "no": justFunction,
}

dic = { "params": (lambda x=myparam : funcWithParam(x)), "no": justFunction, } 生成一个没有参数的匿名函数,该函数将使用lambda : funcWithParam(myparam)调用funcWithParam

答案 1 :(得分:1)

当您创建字典时,由于您正在调用 getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); ,因此正在调用它,因此您在字典中放置的是函数的返回值。

为了把它放在字典中并按键调用,你需要这样做:

"params": (funcWithParam(myparam)

尝试运行此功能,看看你得到了什么:

dic = {
    "params": funcWithParam,
    "no": justFunction,
}

dic.get(userInput,wrong)(myparam)