我有以下函数示例(数字列表的平均值):
def avg(obs):
return (1. / len(obs)) * np.sum(obs)
avg([1,2,3,4,5])
3.0
我很有趣,不明白如何使用单个可迭代参数和两个或多个参数,如max()
max(1,2,3,4,5)
5
max([1,2,3,4,5])
5
我有以下函数示例(数字列表的平均值):
def avg(obs):
return (1. / len(obs)) * np.sum(obs)
avg([1,2,3,4,5])
3.0
我很有趣,不明白如何使用单个可迭代参数和两个或多个参数,如max()
max(1,2,3,4,5)
5
max([1,2,3,4,5])
5
首先,除非你有充分的理由,否则你不应该这样做;min
这样max
做是因为它们的二进制形式很常见,但例如sum
只对可迭代对象进行操作。
这就是说,下面的伎俩。
from collections import Sized
def avg(*obs):
if len(obs) == 1 and isinstance(obs[0], Sized):
obs = obs[0]
return (1. / len(obs)) * sum(obs)
(Sized
是一个抽象基类,它概括了列表、集合、字典、元组、NumPy 数组和各种其他容器。它确保len
已定义。)