替代if-elif子句

Zer*_*chi 1 python

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

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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

使用字典:

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

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

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

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

Danbooru如果booru值不是字典中的键,则使用该函数.