枚举为常量或字符串比较

时间:2015-01-20 20:54:49

标签: python coding-style

我的Python项目能够在两个不同的目的地上执行操作,让他们称之为SF和LA。哪种方法更好?

选项A:

destinations.py

LA = 1
SF = 2

example_operation.py

import destinations
run_operation(destination=destinations.LA)

def run_operation(destination):
    assert destination in [destinations.LA, destinations.SF]
    ...

OR

选项B:

example_operation.py

run_operation(destination='LA')

def run_operation(destination):
    assert destination in ['LA', 'SF']
    ...

我意识到我也可以使用字典或许多其他方法来实现这一目标。我想知道哪种是宣布和验证这些内容的最佳做法。

1 个答案:

答案 0 :(得分:0)

由于它非常主观,我会避免评论哪种方式会更好。您可以尝试从性能点争论(整数比字符串快,但变量查找比常量慢?),或者从代码完成视图(编辑器可以自动完成变量)或可扩展性(您可以轻松使用新的字符串,但最后,它并不重要:它主要是个人偏好。

然而,我想要评论的是验证问题:如何验证这些参数?我通常的回答是:不要。

Python通常在没有很多故障保险的情况下使用。例如,Python没有真正的私有成员,并且stdlib的大部分甚至没有完全隐藏其内部。如果你愿意,你可以使用那些内部,搞乱所有的东西 - 但如果出现问题,那就是你的问题。通常情况下,您只希望用户正确使用您的代码:如果他们传递了您的函数不期望的参数,那么,某些东西将会失败。当然,进行某种验证并不坏,但通常不需要在任何地方放置断言。