我想在一个函数内定义一个字典。我如何一次只能在函数创建时定义该词典。我试图防止在每个函数调用上创建字典。 当前,我定义了一个全局字典并在函数内部使用它,但是还有其他解决方案吗?
media_types = {
1: 'New Video',
2: 'New Image',
3: 'New File',
}
def get_media_type(t):
return media_types.get(t, None)
答案 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,因此将定义字典。所有后续对该函数的调用都不会引发异常,并且将使用字典。
但是,正如您所看到的,这有点混乱,您当前的解决方案是可读的并且可以完成工作