gpt4 book ai didi

python - 太多的 if 语句

转载 作者:太空狗 更新时间:2023-10-29 19:37:24 25 4
gpt4 key购买 nike

我有一些话题要讨论。我有一个包含 24 个 ifs/elifs 的代码片段。 Operation 是我自己的类,表示类似于 Enum 的功能.
这是一段代码:

if operation == Operation.START:
strategy = strategy_objects.StartObject()
elif operation == Operation.STOP:
strategy = strategy_objects.StopObject()
elif operation == Operation.STATUS:
strategy = strategy_objects.StatusObject()
(...)

从可读性的角度来看,我有顾虑。最好将其更改为 24 个类并使用 polymorphism ?我不相信它会使我的代码可维护...一方面,那些 if 非常清楚,应该不难理解,另一方面, 太多了>如果s.

我的问题很笼统,但是我正在用 Python 编写代码,所以我不能使用像 switch 这样的结构.

你怎么看?


更新:

一件重要的事情是 StartObject()StopObject()StatusObject() 是构造函数,我想将一个对象分配给策略引用。

最佳答案

您可以使用字典。字典存储引用,这意味着函数完全可以使用,如下所示:

operationFuncs = {
Operation.START: strategy_objects.StartObject
Operation.STOP: strategy_objects.StopObject
Operation.STATUS: strategy_objects.StatusObject
(...)
}

最好有一个默认操作以防万一,所以当你运行它时使用 try except 并处理异常(即等同于你的 else 子句)

try:
strategy = operationFuncs[operation]()
except KeyError:
strategy = strategy_objects.DefaultObject()

或者使用字典的 get 方法,如果找不到您提供的键,您可以指定一个默认值。

strategy = operationFuncs.get(operation(), DefaultObject())

请注意,将括号存储在字典中时不包括括号,您只需在调用字典时使用它们。此外,这还要求 Operation.START 是可散列的,但情况应该如此,因为您将其描述为类似于 ENUM 的类。

关于python - 太多的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31748617/

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