这是我的代码:
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'对象不可调用。
我想知道使用字典使用参数调用函数的正确语法/方法是什么。
答案 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)