在模块之间进行沟通的pythonic方式是什么?

1 投票
3 回答
2022 浏览
提问于 2025-04-17 07:55

假设我们有以下的C代码:

// events.h
enum Events  {eOne, eTwo, eThree};
enum Events getEvent(void);

...

//ctrl.c
#include "events.h"

void ctrl(void)
{
    switch(getEvent()) 
    {
    case eOne:
        // ...
        break;
    case eTwo:
        // ...
        break;
    case eThree:
        // ...
        break;
    default:
        ;
    }
}

那么在Python中,怎么用更“Python风格”的方式来实现这个呢?对我来说,简单的方法是用字符串来代替枚举类型,但我怎么才能确保所有的字符串都写得正确(也就是说,所有文件中的字符串都是一样的)呢?

3 个回答

0

把字符串变成常量,这样你就可以通过名字来引用它们,而不是在代码里到处都是那些看起来没什么意义的字符串。你可以在一个公共的模块或者类里定义这些常量。

2
class Animal:
    DOG=1
    CAT=2

x = Animal.DOG

来源: 在Python中如何表示'枚举'?

2

下面这段Python代码和你的C代码的交互方式很相似。要使用另一个模块里的变量,你首先需要导入那个模块。

// events.py
class Events:
    eOne, eTwo, eThree = range(3)

def getEvent():
    # add code for getEvent here (might have been in events.c for C code)
    return some_event

...

// ctrl.py
from events import Events, getEvent
def ctrl():
    event = getEvent()
    if event == Events.eOne:
        # ...
    elif event == Events.eTwo:
        # ...
    elif event == Events.eThree:
        # ...
    else:
        # default

撰写回答