另一个带功能的开关盒

Umu*_*bak 3 python function case switch-statement

深入研究有趣的python语言,因此语言中没有作为构造的转换.所以使用词典是阅读学习python第一版的第一选择.所以我试过......

cases = { 2 : readt3(e,t,off, partElems, partsNodes),  # to read the triangular elements 
          3 : readq4(e,t,off, partElems, partsNodes),  # to read the quadrangular elements
          5 : readh8(e,t,off, partElems, partsNodes),  # to read the hexa elements
        }      
# define functions 
def readt3( e, t, off, partElems, partsNodes, partPnt ):
    partsElems[partPnt].append(e)
    nods = t[offset: offset+3];
    for n in nods:
      partsNodes[partPnt].append(n)
    return 
Run Code Online (Sandbox Code Playgroud)

并得到错误"readt3未定义",我认为我得到了这个,因为它没有在案例之前定义然后将函数定义移到上面的情况但仍然是相同的问题,但这次"e未定义"我无法理解这一点,所以e是一个函数参数,为什么我在e上得到一个与定义相关的错误?

在这种情况下,在模拟switch-case时应该在哪里放置函数定义?

mou*_*uad 9

当你做这样的事情时:

...
 2 : readt3(e,t,off, partElems, partsNodes)
...
Run Code Online (Sandbox Code Playgroud)

实际上你正在评估(调用)readt3带有参数的函数e,t,off, partElems, partsNodes我认为你想要做的是这样的事情(模拟switch case语句):

def readt3( e, t, off, partElems, partsNodes, partPnt ):
    partsElems[partPnt].append(e)
    nods = t[offset: offset+3];
    for n in nods:
      partsNodes[partPnt].append(n)
    return 

# And of course all your function definition should be here before the cases dict.

cases = { 2 : readt3,  # to read the triangular elements 
          3 : readq4,  # to read the quadrangular elements
          5 : readh8,  # to read the hexa elements
        }   
Run Code Online (Sandbox Code Playgroud)

现在你可以通过case这样的论证来调用你的案例:

case = 2

cases[case](e,t,off, partElems, partsNodes)
Run Code Online (Sandbox Code Playgroud)