Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不';t`max`和`min`在使用空iterables调用时是否返回适当的无穷大?_Python_Python 3.x_Math_Reduce - Fatal编程技术网

Python 为什么不';t`max`和`min`在使用空iterables调用时是否返回适当的无穷大?

Python 为什么不';t`max`和`min`在使用空iterables调用时是否返回适当的无穷大?,python,python-3.x,math,reduce,Python,Python 3.x,Math,Reduce,我写了一篇关于什么是reduce的文章,它是如何工作的,以及它背后隐藏的函数,在某一点上我谈到了sum,all,any,max,和min,所有的缩减 然后,我将讨论reduce如何接受第三个参数,即初始值,它应该是您正在使用的函数的标识元素。 然后,我继续展示一些特殊的简化,其中包含身份元素: 总和([]) 0 >>>输入数学 >>>math.prod([]) 1. >>>全部([]) 真的 那么,为什么max和min在使用空iterables调用时会抛出错误, 当它们的操作具有标识元素时 >

我写了一篇关于什么是
reduce
的文章,它是如何工作的,以及它背后隐藏的函数,在某一点上我谈到了
sum
all
any
max
,和
min
,所有的缩减

然后,我将讨论
reduce
如何接受第三个参数,即初始值,它应该是您正在使用的函数的标识元素。 然后,我继续展示一些特殊的简化,其中包含身份元素:

总和([]) 0 >>>输入数学 >>>math.prod([]) 1. >>>全部([]) 真的 那么,为什么
max
min
在使用空iterables调用时会抛出错误, 当它们的操作具有标识元素时

>>最大值([])
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:max()arg是一个空序列
我们可以执行
float(“-inf”)
,那么为什么这不是
max([])
返回的值呢?类似地,为什么
min([])
不返回
float(“inf”)

因为
min()
max()
接受任何类型,它们可能无法与float进行比较。例如,字符串:

>>> min('a', 'b')
'a'
>>> min(float('-inf'), 'a', 'b')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'str' and 'float'

也就是说,
min()
max()
比您提到的其他函数有更广泛的应用
sum()
math.prod()
主要用于数字,因此为它们提供数字起始值是有意义的。尽管如此,您可以使用它们的
start
参数来更改它。下面是一些带有列表的示例,尽管它们不是很习惯用法

>>> math.prod([2, 3], start=['a'])  # better: ['a'] * math.prod([2, 3])
['a', 'a', 'a', 'a', 'a', 'a']
>>> sum([['a'], ['b']], start=[])  # better: list(itertools.chain(['a'], ['b']))
['a', 'b']

因为一个空的iterable没有任何项,它的max怎么可能有任何值呢?身份不仅仅是有效的东西,它需要有意义!.
prod
应该计算数字的乘积,但列表可以包含任何内容,
max
可以应用于任何项目列表,只要它们可以进行比较。如果字符串列表恰好为空,为什么无限浮点是一个合理的最大值?@DYZ为
prod
返回1是基于数学约定的。。。想想
n^0
n≠ 0
。返回
None
将意味着无法返回有意义的最大值,而这正是应该引发异常的情况。有一种通用的方法来管理异常,同时创建一个特殊情况,其中
max
将返回
None
,这将防止代码立即失败并允许无效值传播,并强制代码的其余部分在每次使用时测试返回值。
>>> math.prod([2, 3], start=['a'])  # better: ['a'] * math.prod([2, 3])
['a', 'a', 'a', 'a', 'a', 'a']
>>> sum([['a'], ['b']], start=[])  # better: list(itertools.chain(['a'], ['b']))
['a', 'b']