代码之家  ›  专栏  ›  技术社区  ›  Gianni Spear

如何构建一个函数来处理单个可迭代或两个或多个参数

  •  0
  • Gianni Spear  · 技术社区  · 13 年前

    我有以下函数示例(数字列表的平均值):

    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
    
    1 回复  |  直到 13 年前
        1
  •  6
  •   Fred Foo    13 年前

    首先,除非你有充分的理由,否则你不应该这样做; 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 是一个抽象基类,它概括了列表、集合、dicts、元组、NumPy数组和各种其他容器。它确保 len 已定义。)