Я читал о C-подобной switch
идиоме в python, которая выражается в виде словаря, в большинстве примеров используется одна функция и оператор break.В моем случае у меня есть следующие if
if method == 'c3':
Deh = buildD4(I)
Dhe = buildD343(I-1)
elif method == 'c4':
Deh = buildD4(I);
Dhe = buildD4(I-1)
elif method == 'c5':
Deh = buildD343(I)
Dhe = buildD343(I-1)
elif method == 'e2':
Deh = buildAE4(I)
Dhe = buildAH4(I)
elif method == 'y2':
Deh = buildD2(I)
Dhe = buildD2(I-1)
dt=dx
И я переписал как:
eh = {
'c3': buildD4(I),
'c4': buildD4(I),
'c5': buildD343(I),
'e2': buildAE4(I),
'y2': buildD2(I),
}
Deh = eh[method]
he = {
'c3': buildD343(I-1),
'c4': buildD4(I-1),
'c5': buildD343(I-1),
'e2': buildAH4(I),
'y2': buildD2(I-1),
}
Dhe = he[method]
if method == y2:
dt=dx
Мои вопросы:
- Функции внутрисловарь лениво оценивается, то есть они оцениваются только когда я присваиваю их
Deh
или Dhe
?
1.1 Если нет.Как мне этого добиться?
Есть ли лучший (более компактный, читаемый и идиоматический) способ написать это?(или
if/elif
- лучшая конструкция?
PS: все эти build*
функции возвращают квадратную матрицу с размером заданного параметра. I
является целым числом, dt
иdx
- это числа с плавающей запятой, а method
- строка.