我用C语言编写了以下部分代码:
typedef enum {
CAN_NORMAL_MODE = 0x00,
CAN_SLEEP_MODE = 0x01,
CAN_INTERNAL_LOOPBACK_MODE = 0x02,
CAN_LISTEN_ONLY_MODE = 0x03,
CAN_CONFIGURATION_MODE = 0x04,
CAN_EXTERNAL_LOOPBACK_MODE = 0x05,
CAN_CLASSIC_MODE = 0x06,
CAN_RESTRICTED_MODE = 0x07,
CAN_INVALID_MODE = 0xFF
} CAN_OPERATION_MODE;
//more code here in the middle...
d = something
switch (d) {
case CAN_NORMAL_MODE:
mode = CAN_NORMAL_MODE;
break;
case CAN_SLEEP_MODE:
mode = CAN_SLEEP_MODE;
break;
// more cases here, not shown for readability
default:
mode = CAN_INVALID_MODE;
break;
}
这里的d是我从其他来源读取的一个字节。switch语句在另一个函数中,还有更多代码,但我认为没有必要显示,因为它与这一部分无关。
我的问题是:出于某些原因,我正在尝试将这段代码翻译成Python,以便它在本质上与原始C代码相似(也就是说,我不希望Python代码完全不同,这样其他使用过原始C代码的人就可以轻松地理解和使用Python代码)。我不确定如何在Python语言中实现此代码片段中的功能,而不执行没完没了的if-elif...else语句。我认为应该有一种更简单的(pythonic)方法来实现它,但我不确定如何在Python中实现typedef、enum和switch语句。我已经阅读了一些实现enum子句的方法来创建一个以别名和值作为属性的类,如下所示:
class myClass():
def __init__(self):
self.CAN_NORMAL_MODE = 0x00
self.CAN_SLEEP_MODE = 0x01
self.CAN_INTERNAL_LOOPBACK_MODE = 0x02
#etc
我还遇到了一种用Python实现switch语句的聪明方法,使用这样的函数(与我的实际问题没有任何关系,只是为了显示实现的结构):
def switch(argument):
switcher = {
1: "January",
2: "February",
3: "March",
4: "April",
5: "May",
6: "June",
7: "July",
8: "August",
9: "September",
10: "October",
11: "November",
12: "December"
}
print switcher.get(argument, "Invalid month")
但我找不到一种简单易懂的方式将这两件事结合起来。谢谢你,祝你有愉快的一天!
https://stackoverflow.com/questions/55268847
复制相似问题