gpt4 book ai didi

python - 如何通过(字符串)名称选择变量?

转载 作者:太空狗 更新时间:2023-10-29 17:52:06 26 4
gpt4 key购买 nike

我想根据字符串输入从我的函数返回一个预先确定的列表。

def get_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']

最简单的方法是什么?


尝试使用字符串赋值或创建变量的相关问题,参见How do I create variable variables? .这个问题是关于查找它们的。

要查找现有对象(而不是在当前局部变量中),参见How to access object attribute given string corresponding to name of that attribute .

最佳答案

在大多数情况下,普通字典就可以完成这项工作。

>>> 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']

如果您输入未知 key ,此函数将默认返回 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']

关于python - 如何通过(字符串)名称选择变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47496415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com