有没有一种方法只能在函数创建时定义字典?

时间:2019-07-21 07:43:01

标签: python python-3.x

我想在一个函数内定义一个字典。我如何一次只能在函数创建时定义该词典。我试图防止在每个函数调用上创建字典。 当前,我定义了一个全局字典并在函数内部使用它,但是还有其他解决方案吗?

media_types = {
    1: 'New Video',
    2: 'New Image',
    3: 'New File',
}

def get_media_type(t):
    return media_types.get(t, None)

2 个答案:

答案 0 :(得分:6)

您可以通过在python中使用闭包来实现

def get_media_type():
    media_types = {
        1: 'New Video',
        2: 'New Image',
        3: 'New File',
    }
    def media_type_wrapper(t):
        return media_types.get(t, None)
    return media_type_wrapper


get_media_type = get_media_type()

有关python https://www.programiz.com/python-programming/closure中的闭包的更多信息

答案 1 :(得分:2)

您可以将其创建为函数的属性,并且仅使用try/except创建一次:

def get_media_type(t):
    try:
        media_types = get_media_type.media_types
    except AttributeError:
        get_media_type.media_types = {
                            1: 'New Video',
                            2: 'New Image',
                            3: 'New File',
                            }
        media_types = get_media_type.media_types

    return media_types.get(t, None)

这样,仅在第一次调用函数时才会引发Exception,因此将定义字典。所有后续对该函数的调用都不会引发异常,并且将使用字典。


但是,正如您所看到的,这有点混乱,您当前的解决方案是可读的并且可以完成工作