5

我有一个函数,它有几个可能的返回值。作为一个简单的例子,让我们假设它接受一个正整数并返回“小”、“中”或“大”:

def size(x):
    if x < 10:
        return SMALL
    if x < 20:
        return MEDIUM
    return LARGE

我想知道编写和定义返回值的最佳方式。我想知道使用Python函数属性,如下:

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

然后我的调用代码将如下所示:

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

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

4

2 回答 2

3

虽然你可以,但我不会,特别是现在 Python 在 3.4 中有一个Enum 类型,它已被backported

您上面的示例可能如下所示Enum

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

正在使用:

--> Size.classify(15)
<Size.medium: 2>
于 2013-10-30T00:31:35.483 回答
1

namedtuple, 也许?

>>> 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
于 2013-10-30T00:01:29.740 回答