hei*_*iRa 4 python dictionary switch-statement
我试图在python中构建一个开关逻辑.
基于Python中的switch语句的替换?我构建以下代码:
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')
Run Code Online (Sandbox Code Playgroud)
这会给我输出:
I am case 1
I am case 2
I am case 3
default
Run Code Online (Sandbox Code Playgroud)
我期待输出
I am case 2
Run Code Online (Sandbox Code Playgroud)
这种字典大小写逻辑是否仅适用于类定义之外,还是我错过了一些额外的代码?看起来在函数调用中评估所有字典键值对.
在构建字典时,您总是调用所有这些函数.它与课程无关.
d = {'foo': bar()}
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
如果函数也是可变的,你想让字典值callables在调用时调用函数:
{'1': lambda: func('I am case 1'), ...}.get(...)()
# call the function you got ^^
Run Code Online (Sandbox Code Playgroud)
也许:
from functools import partial
{'1': partial(func, 'I am case 1'), ...}.get(...)()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |