You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python手动实现内置max/min函数兼容两类输入的问题咨询

Python自定义max/min函数兼容两种调用方式的实现方案

问题根源

  • 使用*a作为形参时,调用my_max(test)会把整个列表作为元组a的第一个元素,函数直接返回整个列表而非列表内的最大值,导致第一个断言失败
  • 不使用*a作为形参时,调用my_max(7,4,2,5)传入了4个参数,不符合单形参的函数定义,导致第二个断言失败

原生max()的核心逻辑是:如果仅传入1个位置参数,默认该参数为可迭代对象,遍历取值找最值;如果传入多个位置参数,直接在所有位置参数中找最值。

修正后的实现代码

def my_max(*args):
    if not args:
        raise TypeError("my_max() expects at least 1 argument, got 0")
    # 单参数场景:参数为可迭代对象
    if len(args) == 1:
        iter_obj = args[0]
        max_v = next(iter(iter_obj))
        for item in iter_obj:
            if item > max_v:
                max_v = item
        return max_v
    # 多参数场景:直接比较所有参数
    else:
        max_v = args[0]
        for item in args[1:]:
            if item > max_v:
                max_v = item
        return max_v


def my_min(*args):
    if not args:
        raise TypeError("my_min() expects at least 1 argument, got 0")
    # 单参数场景:参数为可迭代对象
    if len(args) == 1:
        iter_obj = args[0]
        min_v = next(iter(iter_obj))
        for item in iter_obj:
            if item < min_v:
                min_v = item
        return min_v
    # 多参数场景:直接比较所有参数
    else:
        min_v = args[0]
        for item in args[1:]:
            if item < min_v:
                min_v = item
        return min_v


test = [7, 4, 2, 6, 8]
assert max(test) == my_max(test) and min(test) == my_min(test)
assert max(7, 4, 2, 5) == my_max(7, 4, 2, 5) and min(7, 4, 2, 5) == my_min(7, 4, 2, 5)
print("pass")

内容的提问来源于stack exchange,提问作者Lewis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:15:05