我正在尝试在工具中实现菜单。但是我无法在python中实现切换用例。我知道python只有字典映射。在那些切换情况下如何调用参数化方法?例如,我有这个程序
def Choice(i):
switcher = {
1: subdomain(host),
2: reverseLookup(host),
3: lambda: 'two'
}
func = switcher.get(i, lambda:'Invalid')
print(func())
在这里,我无法执行参数化调用subdomain(host)
。请帮忙。
答案 0 :(得分:1)
我认为问题是因为创建switcher
字典时会调用前两个函数。您可以通过使所有值lambda
函数定义来避免这种情况,如下所示:
def choice(i):
switcher = {
1: lambda: subdomain(host),
2: lambda: reverseLookup(host),
3: lambda: 'two'
}
func = switcher.get(i, lambda: 'Invalid')
print(func())
答案 1 :(得分:0)
可以使用Python中的字典映射来实现切换用例,如下所示:
def Choice(i):
switcher = {1: subdomain, 2: reverseLookup}
func = switcher.get(i, 'Invalid')
if func != 'Invalid':
print(func(host))
有一个字典switcher
,可根据对函数Choice
的输入来帮助映射到正确的函数。默认情况下要实现的情况是使用switcher.get(i, 'Invalid')
完成的,因此,如果返回'Invalid'
,则可以向用户提供错误消息或将其忽略。
通话如下:
Choice(2) # For example
在调用host
之前,请记住要设置Choice
的值。
答案 2 :(得分:0)
有一个显而易见的选项可以使您正确..
def choice(i, host): # you should normally pass all variables used in the function
if i == 1:
print(subdomain(host))
elif i == 2:
print(reverseLookup(host))
elif i == 3:
print('two')
else:
print('Invalid')
如果您使用的是字典,那么所有rhs(右侧)都必须具有相同的类型,即带有零参数的函数,这一点很重要。我更喜欢在使用字典模拟switch语句时将字典放在使用的地方:
def choice(i, host):
print({
1: lambda: subdomain(host),
2: lambda: reverseLookup(host),
3: lambda: 'two',
}.get(i, lambda: 'Invalid')()) # note the () at the end, which calls the zero-argument function returned from .get(..)
答案 3 :(得分:-1)
尝试一下...。
def Choice(i):
switcher = {
1: subdomain(host),
2: reverseLookup(host),
3: lambda: 'two'
}
func = switcher.get(i, lambda:'Invalid')
print(func())
if __name__ == "__main__":
argument=0
print Choice(argument)