0

我一直试图到处寻找答案,但我似乎找不到。我希望能够在我的函数中返回一个带有 if 和 (an) elif/s 但没有 else 的语句(仅用于学习目的)。我知道您可以执行以下操作:

def my_func(s):
    return "a list" if type(s) == list else "a string" if type(s) == str else "not list or string"

上面展示了python如何允许你拥有一个if,尽可能多的elifs和一个else,但是有没有办法能够拥有一个if和(an)elif/s而不需要最后一个else?需要注意的是,我说的是让它与 return 语句在同一行,而不是扩展的多行检查。

4

5 回答 5

2

不,这是不可能的。请参阅语言规范和相应的pep 308

如果退货,只需添加return something if condition else None

于 2020-05-02T07:49:57.880 回答
2

如果是单行,您可以拥有:

def f(x):
    if x > 10: return 10

并且您没有(明确地)使用else关键字。请注意,这不能被链接。另请注意,这无论如何等同于:

def f(x):
    return 10 if x > 10 else None

因为任何没有显式返回的函数都会返回None


如果您考虑多行结构,请注意您可以执行以下操作:

def f(x):
    if x > 10:
        return 10
    elif x < -10:
        return -10

它没有显式else但等效于两者:

def f(x):
    if x > 10:
        return 10
    elif x < -10:
        return -10
    return None

和:

def f(x):
    if x > 10:
        return 10
    elif x < -10:
        return -10
    else:
        return None

所以,总而言之,在结尾没有anelse或不使用a if condition else b表达式没有多大价值。

if-else无论如何,链接多个表达式的可读性可能并不理想。只需使用多行代码即可享受代码的可读性。


如果您唯一关心的是知道条件表达式是否需要else作为 Python 语法的一部分,那么答案是:是的。有关更多信息,请参阅相关的PEP308

于 2020-05-02T07:52:25.220 回答
1

如前所述,这是一个“条件表达式”。表达式总是必须解析为一个对象,但没有elsethis 表达式就不会。else None是合理的。

于 2020-05-02T07:54:21.053 回答
0

In return x,x是一个表达式,无论如何都必须对某个对象求值。所以你不能省略三元运算符else的部分(这就是为什么它被称为三元而不是“三元或二元”;-))。话虽如此,您可以缩短代码:

def my_func(s):
    return {list: "a list", str: "a string"}.get(type(s), "not list or string")
于 2020-05-02T08:12:41.330 回答
0

您可以在 if 语句 '' if (type(s) == list): return ....'' 中使用 return 来编写相同的想法

于 2020-05-02T07:54:18.307 回答