使用布尔值而不是'if''else'

时间:2019-07-24 11:01:12

标签: python-3.x

我有一个函数,该函数接受一个数字列表并返回平均值。为了处理长度为零的列表,该函数使用AND,因此如果列表为空,则该函数返回0,否则返回平均值

def avg(*args):
    count = len(args)
    total = sum(args)

    return count and total / count  

我不明白为什么这样做。如果length不为零,python如何知道返回总数/计数?

1 个答案:

答案 0 :(得分:0)

就像jonrsharpe写道,return count and total / count等同于return total / count if count != 0 else count

为什么起作用?

原因之所以等效,是因为and运算符会评估第一个语句,这里是count,并且仅在 expression不是false,它评估右边的语句。因此,其他所有内容只会在右侧显示该语句的值。

但是要注意,如果左侧的语句为false,则返回左侧的语句的值。因此,在0 and total / count中,将返回0。在False and total / count中,返回False。

表达式也可以是 function ,这意味着在类似file.write('spam') and file.flush()的情况下,可能不会执行其中一个函数;如果file.write()调用失败,则and将不会运行第二个表达式,并且不会调用file.flush(),因此不会刷新文件。

因此,例如,当写入数据库时​​,此表达式可能会产生巨大影响。对于某些人来说,可能不清楚“ if”“ else”的意图。在这种情况下,请考虑改用'if''else'语句。