另一个具有功能的开关箱

2024-10-01 09:23:28 发布

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

深入研究有趣的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 

得到了错误“readt3 is undefined”,我想我得到这个是因为它在case之前没有定义,然后把函数定义移到cases上面,但是这个问题还是一样的,但是这次“e is not defined”我不能理解,所以e是一个函数参数,为什么我在e上得到一个定义相关的错误?在

在这种情况下模拟交换机情况时,函数定义应该放在哪里?在


Tags: theto语言read定义elementsoffsetoff
3条回答

事实上,使用措辞来调度呼叫是一件有时可以做的事情,只要有意义,当你知道你在做什么的时候。在

在其他语言中用来代替“switch...case”的Python语法构造是“if..elif..else”。在

我不知道为什么人们根本不喜欢它。就像一个人会“失去表现”或其他什么。但是..switch case,when one think,是if--else链的一个非常狭窄的特例:它只允许比较相等,并且只比较整数(至少在C语言中,我不知道所有克隆C语法的语言),而在if elif链中,可以使用任何表达式。在

很容易看出Switch case语句是在C中引入的,因为它允许编译器为这种特殊情况自动进行优化(使用跳转表,而不是一系列比较)。但是…这只对编译语言有意义,而且,只有当编译器不能单独处理这些优化时才有意义,即使这样,只有在10次或20次比较的速度差大于使用跳转表时才有意义。在

如您所见,在现代高级语言中使用“switch case”是相当多余的,这是因为可以将if elif else语句连接起来。在

这本词典不是用来作为一个结构使用的。它不是用来存储结构的,而是用来存储真实数据的。在你的情况下,我认为最好是定义一个对象。考虑在这个场景中使用OO。在

当你做这样的事情时:

...
 2 : readt3(e,t,off, partElems, partsNodes)
...

实际上,您正在使用参数e,t,off, partElems, partsNodes计算(调用)函数readt3。我想您想做的是类似这样的事情(模拟switch case语句):

^{pr2}$

现在你可以用这样一个case参数来调用你的案例:

case = 2

cases[case](e,t,off, partElems, partsNodes)

相关问题 更多 >