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
.
我的子问题是:
numba
或cython
)是否会从for
循环切换到switch-cases
循环,反之亦然?if-elif-else
以提高可读性?如果之前有人问过这个问题,我深表歉意。我尝试检查建议的问题,但对我的目的没有帮助。
提前致谢!
那么,什么时候使用 for 循环而不是 if-elif-else 语句更好呢?
对于这个特定目的,循环总是if
比else if
链更清晰。else
这是首选循环的充分理由,除非在极不可能的情况下,您跟踪此类循环的性能瓶颈并发现通过更改为if
.
- 如果感觉其他方法更快,编译器(或者在 Python 的情况下,numba 或 cython)是否会从 for 循环切换到 switch-cases,或者反之亦然?
循环展开是一种标准优化,许多 C 编译器在认为会产生改进时都会执行该优化。一个短循环可能会完全展开,不存在,这实际上是您所要求的转换。
我不知道编译器执行反向转换。
- 是否存在普遍预期的良好编码实践,建议 if-elif-else 语句的最大长度,以确保易于遵循代码?
不是这样的。
编写清晰的代码,不要重复自己。
- 数组的长度或迭代次数是否存在一个阈值,其中一个比另一个表现更好?
不是特别。性能有很多因素,但很少有明确的规则。
一般来说,首先让它工作,然后,如果有必要,让它更快。