为多个函数的字典替换多个elif

2024-09-30 01:19:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我读过关于python中C-like switch的习语可以表示为字典,大多数示例使用单个函数和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

我的问题是:

  1. 字典中的函数是延迟计算的,也就是说,仅当我将它们赋给DehDhe时才对它们进行计算

1.1如果没有。我怎样才能做到这一点

  1. 有没有更好的(更简洁、更易读、更惯用的)写作方法(或者if/elif是最好的结构

PS:所有这些build*函数都返回一个给定参数大小的方阵I是整数,dtdx是浮点数,method是字符串


Tags: 函数ifdtmethodelifc3c5y2
1条回答
网友
1楼 · 发布于 2024-09-30 01:19:45
  1. 不,必须首先构造字典,这意味着必须计算所有键和值。但是,可以将函数存储为值:

    data = {'a': lambda x: print(f"hello, {x}!"), 'b': lambda x: print(f"Hi, {x}!")}
    data['a']("world")
    

    1.1您可以这样做:unevaluated = lambda: do_stuff()。现在,do_stuff只会在调用unevaluated()时被调用,但这看起来有点难看

  2. 使用包含单个函数的词典可能是一种方法

相关问题 更多 >

    热门问题