作者:手机用户2602917233 | 来源:互联网 | 2023-05-26 17:51
在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
通过两者的区分:对于min
它Py_LT
和max
它的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的事实上的一部分),但我认为这不是保证.