尝试这一小段代码,可以替代交换机。但是我得到了错误。
def main(x):
x = x.split(' ')
return {'Function1' : Function1(x),
'Function2' : Function2(x),
}[x[0]]
def Function1(x):
var1 = x[0]
var2 = x[1]
def Function2(x):
print x[0]
main("Function1 10")
现在上面的代码工作正常。问题是如果我将Function2作为键传递而没有任何主函数参数,它会自动进入Function1并抛出列表超出范围错误。
main("Function2")
先谢谢。
答案 0 :(得分:3)
您的代码根本不起作用。在定义dict时总是调用函数。你应该在dict中保持callable并调用结果。
def main(x):
x = x.split(' ')
func = {'Function1' : Function1,
'Function2' : Function2,
}[x[0]]
return func(x[1])
答案 1 :(得分:1)
代码块
return {'Function1' : Function1(x),
'Function2' : Function2(x),
}[x[0]]
首先评估为
return {'Function1' : Function1(x),
'Function2' : Function2(x),
}
评估此内容实际上会同时调用Function1
和Function2
。
你想要的是获得对正确功能的引用而不实际调用它,直到你知道要调用哪一个:
return {'Function1' : Function1,
'Function2' : Function2,
}[x[0]](x)
答案 2 :(得分:0)
您真正应该做的是使用一串if/elif/else
语句:
if x == 1:
Function1()
elif x == 2:
Function2()
else:
Function3()