需要在python中缩小我的大if if elif语句

Mic*_*ham 0 python if-statement

我试图看看是否有更有效的方法来编写ifif语句.编写API以根据调用类的参数数量生成URL.

对于Ex:

def Cars(self, model=null, color=null, miles=null)

    if model == null and color == null and miles ==null:
        url = cars/
    elif model != null and color == null and miles ==null:
        url = cars/model=%s)% model
    elif model != null and color != null and miles ==null:
        url = cars/model=%s/color=%s)% model, color
    else url = someting

    return url
Run Code Online (Sandbox Code Playgroud)

我有超过10个参数,并且不想用所有组合编写那么多elif语句.

che*_*ner 8

这些属性似乎并不相互依赖; 分别处理每一个:

def cars(self, model=None, color=None, miles=None)
    url = "cars"

    if model is not None:
        url += "/model=%s" % (model,)
    if color is not None:
        url += "/color=%s" % (color,)
    if miles is not None:
        url += "/miles=%s" % (miles,)

    return url
Run Code Online (Sandbox Code Playgroud)

这导致您意识到您可能希望接受任意关键字参数,并检查特定集的存在:

def cars(self, **kwargs):
    url = "cars"
    for kw in ["model", "color", "miles"]:
        if kwargs.get(kw) is not None:
            url += "/%s=%s" % (kw, kwargs[kw])
    return url
Run Code Online (Sandbox Code Playgroud)

这忽略了您正在构建的字符串实际上是否是有效URL的问题.