我有一个函数,该函数接受一个数字列表并返回平均值。为了处理长度为零的列表,该函数使用AND,因此如果列表为空,则该函数返回0,否则返回平均值
def avg(*args):
count = len(args)
total = sum(args)
return count and total / count
我不明白为什么这样做。如果length不为零,python如何知道返回总数/计数?
答案 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'语句。