【问题标题】:what is pythonic way to communicate between modules?什么是模块之间通信的pythonic方式?
【发布时间】:2011-12-07 19:53:27
【问题描述】:

让我们假设以下 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:
        ;
    }
}

pythonic 的实现方式是什么?对我来说最简单的方法是使用字符串而不是枚举,但我如何确保所有字符串都输入正确(即所有文件中的字符串都相同)?

【问题讨论】:

  • 您是要实现enums 的pythonic 方式,实现switch 语句的pythonic 方式,模块之间通信的pythonic 方式,还是别的什么?你能提供更多的代码吗?根据您的操作,有不同的解决方案。
  • @ivand58:关于模块之间的通信,您认为用例是什么?
  • 能否提供一个用户场景?从外观上看,我认为您需要的只是安装 carrot... ;) 但我可能会遗漏一些东西!

标签: python interface implementation


【解决方案1】:

以下 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

【讨论】:

    【解决方案2】:
    class Animal:
        DOG=1
        CAT=2
    
    x = Animal.DOG
    

    来源:How can I represent an 'Enum' in Python?

    【讨论】:

      【解决方案3】:

      将字符串设为常量,然后您可以按名称引用它们,这样您就不会在源代码中出现魔术字符串。您可以在公共模块或类中定义这些常量。

      【讨论】:

        猜你喜欢
        • 2015-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-23
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        相关资源
        最近更新 更多