热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

带lambda的min总是返回python中的第一个值吗?

如何解决《带lambda的min总是返回python中的第一个值吗?》经验,为你挑选了1个好方法。

在python 2.7.3中,使用带有lambda的min函数,例如min(list, key=f)where f是lambda函数.如果是列表中的f(x)所有值总是相同的情况x,是否保证list[0]将返回?

谢谢



1> Ashwini Chau..:

在CPython和PyPy中是的.您可以在源代码中看到maxval仅当当前值低于时才更新maxval.需要注意的是在内部CPython的相同的功能(min_max)被用于两个min()mix(),唯一的区别是op通过两者的区分:对于minPy_LTmax它的Py_GT.

maxitem = NULL; /* the result */
maxval = NULL;  /* the value associated with the result */
while (( item = PyIter_Next(it) )) {
    /* get the value from the key function */
    if (keyfunc != NULL) {
        val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
        if (val == NULL)
            goto Fail_it_item;
    }
    /* no key function; the value is the item */
    else {
        val = item;
        Py_INCREF(val);
    }

    /* maximum value and item are unset; set them */
    if (maxval == NULL) {
        maxitem = item;
        maxval = val;
    }
    /* maximum value and item are set; update them as necessary */
    else {
        int cmp = PyObject_RichCompareBool(val, maxval, op);
        if (cmp <0)
            goto Fail_it_item_and_val;
        else if (cmp > 0) {
            Py_DECREF(maxval);
            Py_DECREF(maxitem);
            maxval = val;
            maxitem = item;
        }
        else {
            Py_DECREF(item);
            Py_DECREF(val);
        }
    }
}

与PyPy相同的情况下,w_max_item并且w_max_val仅如果该项目是从序列中的第一项的或更新的,如果它满足条件按照基于的值所选择的功能implementation_of("最大"或"分钟"):

if not has_item or \
        space.is_true(compare(w_compare_with, w_max_val)):
    has_item = True
    w_max_item = w_item
    w_max_val = w_compare_with


鉴于这是未记录的事实,我们是否应该避免编写假设CPython以这种方式运行的Python代码?我怀疑实现是否会以一种破坏这种行为的方式发生变化(它本质上是API的事实上的一部分),但我认为这不是保证.
推荐阅读
author-avatar
手机用户2602917233
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有