我制作了一个从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/