我正在尝试在 python 中构建开关逻辑。
基于 Replacements for switch statement in Python?我构建了以下代码:
def func(string):
print(string)
class Switch:
def __init__(self):
pass
def first_switch(self, case):
return {
'1': func('I am case 1'),
'2': func('I am case 2'),
'3': func('I am case 3'),
}.get(case, func('default'))
switch = Switch()
switch.first_switch('2')
这将给我输出:
I am case 1
I am case 2
I am case 3
default
我希望输出是
I am case 2
这个字典大小写逻辑是否只适用于类定义之外,还是我错过了一些额外的代码?看起来所有字典键值对都在函数调用时求值。
最佳答案
在构建字典时,您总是会调用所有这些函数。它与类无关。
d = {'foo': bar()}
bar
在这里被调用,它的返回值分配给 d['foo']
。请记住,这不是 switch
语句;它是一个字典文字,用于模拟 switch
语句。
在您的情况下,该函数不是可变的,因此根本不必包含在内:
arg = {
'1': 'I am case 1',
'2': 'I am case 2',
'3': 'I am case 3',
}.get(case, 'default')
func(arg)
如果该函数也是可变的,您希望使字典值成为可调用函数,在调用时将调用该函数:
{'1': lambda: func('I am case 1'), ...}.get(...)()
# call the function you got ^^
或者也许:
from functools import partial
{'1': partial(func, 'I am case 1'), ...}.get(...)()
关于类内的 Pythonic 开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46908510/