python - 替代 if-elif 子句

标签 python

我制作了一个从booru imageboards 下载的脚本。如果我想添加更多 booru 图像板选项,是否有任何替代方法可以使这个丑陋的 if-elif 子句看起来更简单?谢谢。

def runbooru(tags, limit=0, booru="Danbooru"):
    tag = Danbooru(tags, limit)
    if booru == "Danbooru":
        tag = Danbooru(tags, limit)
    elif booru == "Gelbooru":
        tag = Gelbooru(tags, limit)
    elif booru == "Rule34":
        tag = Rule34(tags, limit)
    elif booru == "Konachan":
        tag = Konachan(tags, limit)
    elif booru == "Yandere":
        tag = Yandere(tags, limit)
    elif booru == "Safebooru":
        tag = Safebooru(tags, limit)
    return tag

最佳答案

使用字典:

processors = {f.__name__: f for f in (
    Danbooru, Gelbooru, Konachan, Yandere, Safebooru)}
if booru in processors:
    tag = processors[booru](tags, limit)

函数也是对象,您可以将它们存储在其他对象中,例如字典和列表。

如果你想让 Danbooru 成为默认值,你也可以在这里使用 dict.get():

processors = {f.__name__: f for f in (
    Danbooru, Gelbooru, Konachan, Yandere, Safebooru)}
tag = processors.get(booru, Danbooru)(tags, limit)

如果 booru 值不是字典中的键,这将使用 Danbooru 函数。

关于python - 替代 if-elif 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28913181/

相关文章:

python - 重新编码丢失的数据 Numpy

python - 为什么我的客户端套接字在第一次发送后就死了?

python - 在列表框中显示组合框中的用户选择时出现问题

python - 如何在我的 view.py 中添加 highchart?

javascript - 通过 Django 模板将对象传递给 javascript

python 将字符串分割成多个分隔符并放入字典中

python - 多线程可加快下载速度

python - 在 Python 文件 .py 中 Bootstrap

python - 从两个 numpy 数组中删除匹配的元素

Python 通过请求登录 chess.com