什么时候值得在 if-else 语句上使用循环?

ck1*_*7pd 2 c python loops if-statement compilation

some_array假设我正在寻找wheresome_array等于 的索引target。我知道 python 有列表理解 和np.where(),这两个功能都可以很好地满足我的目的。但还要假设我想用if-elif-else 语句或循环来完成它for。如果数组长度为 3,则实现如下所示:

if some_array[0]==target:
    return 0
elif some_array[1]==target:
    return 1
else:
    return 2 
Run Code Online (Sandbox Code Playgroud)
for i in range(3):
    if some_array[i]==target:
        return i
Run Code Online (Sandbox Code Playgroud)

那么,什么时候使用 for 循环而不是 if-elif-else 语句更好呢?我最感兴趣的是它在 python 和 C 中的应用,即switch-cases.

我的子问题是:

  • 如果感觉另一种方法更快,编译器(或在Python的情况下,numbacython)是否会从for循环切换到switch-cases循环,反之亦然?
  • 是否存在普遍接受的良好编码实践,建议语句的最大长度if-elif-else以提高可读性?
  • 数组的长度或迭代次数是否存在一个阈值,其中一个比另一个表现更好?

如果之前有人问过这个问题,我深表歉意。我尝试检查建议的问题,但对我的目的没有帮助。

提前致谢!

Joh*_*ger 6

那么,什么时候使用 for 循环而不是 if-elif-else 语句更好呢?

对于这个特定目的,循环总是ifelse if链更清晰。else这是首选循环的充分理由,除非在极不可能的情况下,您跟踪此类循环的性能瓶颈发现通过更改为if.

  • 如果感觉其他方法更快,编译器(或者在 Python 的情况下,numba 或 cython)是否会从 for 循环切换到 switch-cases,或者反之亦然?

循环展开是一种标准优化,许多 C 编译器在认为会产生改进时都会执行该优化。一个短循环可能会完全展开,不存在,这实际上是您所要求的转换。

我不知道编译器执行反向转换。

  • 是否存在普遍预期的良好编码实践,建议 if-elif-else 语句的最大长度,以确保易于遵循代码?

不是这样的。

编写清晰的代码,不要重复自己。

  • 数组的长度或迭代次数是否存在一个阈值,其中一个比另一个表现更好?

不是特别。性能有很多因素,但很少有明确的规则。

一般来说,首先让它工作,然后,如果有必要,让它更快。