如何从切换案例中调用方法?

时间:2018-12-24 12:12:59

标签: python python-3.x switch-statement

我正在尝试在工具中实现菜单。但是我无法在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)。请帮忙。

4 个答案:

答案 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)