gpt4 book ai didi

python - Python 中的 Switch/Case 实现有什么值(value)吗?

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:58 24 4
gpt4 key购买 nike

最近,我在网上看到一些关于 Python 中如何没有好的“switch/case”等价物的讨论。我意识到有几种方法可以做类似的事情——一些使用 lambda,一些使用字典。还有其他关于替代方案的 StackOverflow 讨论。甚至有两个 PEP(PEP 0275 和 PEP 3103)讨论(并拒绝)将 switch/case 集成到语言中。

我想到了一种我认为是处理 switch/case 的优雅方式。

最终看起来像这样:

from switch_case import switch, case         # note the import style

x = 42
switch(x) # note the switch statement
if case(1): # note the case statement
print(1)
if case(2):
print(2)
if case(): # note the case with no args
print("Some number besides 1 or 2")

所以,我的问题是:这是一个有值(value)的创作吗?您有什么改进建议吗?

我把 include file on github ,以及广泛的例子。 (我认为整个包含文件大约有 50 行可执行文件,但我有 1500 行示例和文档。)我是否过度设计了这个东西,浪费了很多时间,或者有人会觉得这值得吗?

编辑:

试图解释为什么这与其他方法不同:
1)多条路径是可能的(执行两种或多种情况), 这在字典方法中更难。
2) 可以检查除“等于”以外的比较 (例如大小写(小于(1000))。
3) 比字典方法更具可读性,可能还有if/elif方法
4) 可以跟踪有多少真实案例。
5) 可以限制允许的 True 案例数。 (即执行 前 2 个真实案例……)
6) 允许默认情况。

这是一个更详细的例子:

from switch_case import switch, case, between

x=12
switch(x, limit=1) # only execute the FIRST True case
if case(between(10,100)): # note the "between" case Function
print ("%d has two digits."%x)
if case(*range(0,100,2)): # note that this is an if, not an elif!
print ("%d is even."%x) # doesn't get executed for 2 digit numbers,
# because limit is 1; previous case was True.
if case():
print ("Nothing interesting to say about %d"%x)



# Running this program produces this output:

12 has two digits.

这里有一个例子试图展示 switch_case 如何比传统的 if/else 更清晰和简洁:

# conventional if/elif/else:
if (status_code == 2 or status_code == 4 or (11 <= status_code < 20)
or status_code==32):
[block of code]
elif status_code == 25 or status_code == 45:
[block of code]
if status_code <= 100:
[block can get executed in addition to above blocks]

# switch_case alternative (assumes import already)
switch(status_code)
if case (2, 4, between(11,20), 32): # significantly shorter!
[block of code]
elif case(25, 45):
[block of code]
if case(le(100)):
[block can get executed in addition to above blocks]

最大的节省是长 if 语句,其中一遍又一遍地重复相同的开关。不确定用例的频率,但似乎在某些情况下这是有意义的。

github 上的示例文件有更多示例。

最佳答案

So, my questions are: Is this a worthwhile creation?

没有。

Do you have any suggestions for making it better?

是的。不要打扰。它拯救了什么?严重地?实际上,通过从每个 elif 条件中删除变量 x,您实际上使代码变得更加模糊。此外,通过替换明显的 elif if 你故意让所有 Python 程序员感到困惑,他们现在认为这些情况是独立的。

这会造成混淆。

The big savings is in long if statements where the same switch is repeated over and over. Not sure how frequent of a use-case that is, but there seems to be certain cases where this makes sense.

没有。这是非常罕见的,非常做作并且很难阅读。查看涉及的实际变量是必不可少的。省略变量名故意使事情变得困惑。现在我必须找到所属的 switch() 函数来解释 case

当有两个或更多变量时,这完全崩溃了。

关于python - Python 中的 Switch/Case 实现有什么值(value)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5440990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com