关于枚举:Python – 使用函数属性作为返回值

Python — using function attributes as return values

本问题已经有最佳答案,请猛点这里访问。

我有一个函数,它有一些可能的返回值。作为一个不起眼的例子,让我们假设它接受了一个正整数,并返回"small"、"medium"或"large":

1
2
3
4
5
6
def size(x):
    if x < 10:
        return SMALL
    if x < 20:
        return MEDIUM
    return LARGE

我想知道写和定义返回值的最佳方法。我想知道如何使用python函数属性,如下所示:

1
2
3
4
5
6
7
8
9
10
def size(x):
    if x < 10:
        return size.small
    if x < 20:
        return size.medium
    return size.large

size.small = 1
size.medium = 2
size.large = 3

那么我的电话号码应该是:

1
2
if size(n) == size.small:
    ...

这似乎是一个很好的内置"枚举",可能比创建模块级枚举更清晰/更简单,或者将3个值定义为全局常量(如SIZE_SMALL, SIZE_MEDIUM等),但我认为我以前没有见过这样的代码。这是一个好的方法还是有缺陷/缺点?


当你可以,我不能,尤其是现在,Python有一枚举类型在这3.4 backported有蜜蜂。 </P >

例如,你可能看以上这类作为一Enum: </P >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Size(Enum):

    small = 1
    medium = 2
    large = 3

    @classmethod
    def classify(cls, number):
        if number < 10:
            return cls.small
        elif number < 20:
            return cls.medium
        else:
            return cls.large

在使用: </P >

1
2
--> Size.classify(15)
<Size.medium: 2>

namedtuple,严格讲来或许全吗? </P >

1
2
3
4
5
6
7
8
9
10
11
12
>>> from collections import namedtuple
>>>
>>> SizeSpec = namedtuple('SizeSpec', ['small', 'medium', 'large'])
>>>
>>> size = SizeSpec(small=1, medium=2, large=3)
>>>
>>> size.small
1
>>> size.medium
2
>>> size.large
3