我正在尝试使用函数返回给定列表。
def get_ext(file_type):
text = ['txt', 'doc']
audio = ['mp3', 'wav']
video = ['mp4', 'mkv']
return ?????
get_ext('audio') #should return de list ['mp3', 'wav']
然后我被卡住了。这是大量扩展的简单/简短示例。最简单的方法是什么?
在大多数情况下,普通字典就可以完成这项工作。
>>> get_ext = {'text': ['txt', 'doc'],
... 'audio': ['mp3', 'wav'],
... 'video': ['mp4', 'mkv']
... }
>>>
>>> get_ext['video']
['mp4', 'mkv']
如果您确实想要或需要一个功能(可能有正当的理由),则有两种选择。最简单的get
方法之一就是分配给字典的方法。get_ext
如果您不需要幕后字典,甚至可以重新分配名称。
>>> get_ext = get_ext.get
>>> get_ext('video')
['mp4', 'mkv']
None
如果您输入未知密钥,此函数将默认返回:
>>> x = get_ext('binary')
>>> x is None
True
如果您想用一个KeyError
代替未知密钥,请分配给get_ext.__getitem__
代替get_ext.get
。
如果要自定义默认值,一种方法是将字典包装在函数中。本示例使用一个空列表作为默认值。
def get_ext(file_type):
types = {'text': ['txt', 'doc'],
'audio': ['mp3', 'wav'],
'video': ['mp4', 'mkv']
}
return types.get(file_type, [])
但是,@ omri_saadon给出了有效的说明,types = ...
即每个函数调用都执行该赋值。如果这困扰您,您可以采取以下措施来解决此问题。
class get_ext(object):
def __init__(self):
self.types = {'text': ['txt', 'doc'],
'audio': ['mp3', 'wav'],
'video': ['mp4', 'mkv']
}
def __call__(self, file_type):
return self.types.get(file_type, [])
get_ext = get_ext()
从此以后,您可以get_ext
像常规函数一样使用,因为最后可调用对象就是可调用对象。:)
请注意,这种方法(除了self.types
只能创建一次)具有很大的优势,即您仍可以轻松更改函数可以识别的文件类型。
>>> get_ext.types['binary'] = ['bin', 'exe']
>>> get_ext('binary')
['bin', 'exe']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句