我想在Python中编写一个函数,它根据输入索引的值返回不同的固定值.
在其他语言中,我会使用switch或case声明,但Python似乎没有switch声明.在这种情况下,推荐的Python解决方案是什么?
C/C++、C#、Java、JavaScript 和 Pascal (参考)等编程语言具有switchandcase语句(有时也称为selector inspect)的组合,允许您根据多个条件检查一个值以执行某些操作。
my_value = 10;
switch(my_value) {
case 10:
print("The number is ten");
case 2*10:
print("The number is the double of ten");
case 100:
print("The number is one hundred");
default:
print("The number is none of 10, 2*10 or 100");
}
Run Code Online (Sandbox Code Playgroud)
描述switch-case结构的特殊语法的伪代码。
意识到像dictionary-lookups这样的功能等价物,是否有与上述编程结构完全相同的语法?
python syntax pattern-matching switch-statement conditional-statements
我想找到switch用C语言完成工作的最快方法.我正在编写一些Python代码来替换C代码,除了瓶颈外,它们都运行良好.此代码用于紧密循环,因此获得最佳性能确实非常重要.
Optimsation尝试1: 第一次尝试,按照前文的问题,比如这个建议使用哈希表进行查找.这最终变得异常缓慢.
恐惧症尝试2
我所做的另一项优化是创建一系列if ... return语句,这使我的速度提升了13%.它仍然令人失望地缓慢.
Optimsation Attempt 3
我创建了array.array所有可能的输入值,并进行了索引查找.这导致总体加速度达到43%,这是可以接受的.
我正在运行一个array.array使用map并将转换函数传递给它.这个函数正在进行查找.我的开关正在处理短整数(它是一个类型化的数组).如果这是GCC C,编译器将创建一个跳转表.令人沮丧的是,要知道Python要么在查找表条目时要哈希值,要么在if的情况下进行大量的比较.我从分析中了解到,缓慢的功能正是正在进行查找的功能.
将一个整数映射到另一个整数的绝对最快方法是什么,映射在array.arrayif相关的位置.还有比上面更快的东西吗?
虽然它让我看起来只是一个白痴,只是为了实现,我会说它anwyay!请记住,在Profiler运行您的代码减慢你的代码下来不少.就我而言,慢了19倍.突然间,我的瓶颈并不是那么糟糕!非常感谢大家的所有答案.这个问题仍然有效.我会稍微提出这个问题,因为可能会有一些有趣的答案.
使用分析器,我的测试数据集:
real 0m37.309s
user 0m33.263s
sys 0m4.002s
Run Code Online (Sandbox Code Playgroud)
无:
real 0m2.595s
user 0m2.526s
sys 0m0.028s
Run Code Online (Sandbox Code Playgroud)