我正在学习numpy.但我有些疑惑让我困惑:
>>> import numpy as np
>>> a = np.arange(10)
>>> a.sum()
45
Run Code Online (Sandbox Code Playgroud)
并:sum(a)
给出相同的结果.那么为什么内置函数可以支持从第三方库计算数据类型呢?min()和max()做同样的事情.(当昏暗是1时)
我对此有两个猜测,我更喜欢后者:
所有第三方库类型都要做,是实现预期的协议(有时也称为接口).该sum()
函数文档告诉你的期望是什么:
Sums 从左到右开始和可迭代的项目并返回总数.
min()
并max()
声明类似的要求(返回可迭代中的最小项,返回可迭代中的最大项).
这里,iterable是一种协议,在标准类型文档中描述.协议本身不是类型,它们只是预期以某种方式运行的方法的集合.该collections.abc
模块提供了几个对象,您可以使用它们来测试某些实现协议的内容:
>>> import numpy as np
>>> from collections.abc import Iterable
>>> a = np.arange(10)
>>> isinstance(a, Iterable)
True
Run Code Online (Sandbox Code Playgroud)
所以ndarray
类型是可迭代的,这就是sum()
函数用于获取数组中包含的所有值的函数,为您总结这些值.
由于Python依赖于协议,因此核心语言开发人员不必为每个第三方库添加支持.相反,这些库只是符合核心语言的期望.
注意,ndarray.sum()
实现可以使用该类型的内部实现; 它可能会更快地产生总和,因为它不必首先将内部数据转换为Python对象(迭代返回盒装类型,int
在这种情况下为Python 对象,而内部表示包含裸C整数).
归档时间: |
|
查看次数: |
79 次 |
最近记录: |