Я хочу вернуть заранее определенный список из моей функции, основанный на вводе строки.
defget_ext(file_type): text = ['txt', 'doc'] audio = ['mp3', 'wav'] video = ['mp4', 'mkv'] return# what do I return here?
get_ext('audio') #should return the list ['mp3', 'wav']
Какой самый простой способ это сделать?
О связанной с этим проблеме использования строк для назначения или создания переменных см. в разделе Как мне создавать переменные variable?. Этот вопрос касается их поиска.
Если вы действительно хотите или нуждаетесь в функции (для чего могут быть веские причины), у вас есть пара вариантов. Один из самых простых - назначить get методу dictionary . Вы даже можете повторно назначить имя get_ext, если вам не нужен словарь за кулисами.
Эта функция вернет None значение по умолчанию, если вы введете неизвестный ключ:
>>> x = get_ext('binary') >>> x isNone True
Если вы хотите KeyError вместо неизвестных ключей, назначьте get_ext.__getitem__ вместо get_ext.get.
Если вам нужно пользовательское значение по умолчанию, один из подходов - обернуть словарь внутри функции. В этом примере в качестве значения по умолчанию используется пустой список.
Однако @omri_saadon правильно заметил, что types = ... присваивание выполняется при каждом вызове функции. Вот что вы можете сделать, чтобы обойти это, если это вас беспокоит.
С этого момента вы можете использовать get_ext как обычную функцию, потому что в конечном итоге вызываемые объекты являются вызываемыми объектами. :)
Обратите внимание, что этот подход - помимо того факта, что self.types создается только один раз - имеет значительное преимущество в том, что вы все еще можете легко изменять типы файлов, которые распознает ваша функция.
Если вы не хотите определять dictionary как в @timgeb's answer, то вы можете вызвать locals(), который выдаст вам dict одну из переменных, доступных в локальной области видимости.
defget_ext(file_type): text = ['txt', 'doc'] audio = ['mp3', 'wav'] video = ['mp4', 'mkv'] returnlocals()[file_type]
и тест, чтобы показать, что это работает:
>>> get_ext("text") ['txt', 'doc']
Ответ 3
Вы можете легко использовать dict со значениями кортежа / списка следующим образом:
возвращает пустой список в случае, если этот ключ не существует. как бы то ни было, это самый простой ответ, который пришел мне в голову, для лучшего ответа см. Ответ @timgeb .