相关疑难解决方法(0)

Python中的switch语句的替换?

我想在Python中编写一个函数,它根据输入索引的值返回不同的固定值.

在其他语言中,我会使用switchcase声明,但Python似乎没有switch声明.在这种情况下,推荐的Python解决方案是什么?

python switch-statement

1719
推荐指数
32
解决办法
149万
查看次数

Python 中 switch/case 的语法等价物是什么?

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

12
推荐指数
2
解决办法
5408
查看次数

最快的Python相当于切换整数数组

我想找到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)

python optimization

5
推荐指数
1
解决办法
247
查看次数