numpy.ndarray的可迭代行为来自哪里?

hat*_*rix 2 python numpy

numpy的ndarray类被定义为

class ndarray(__builtin__.objects)
Run Code Online (Sandbox Code Playgroud)

从我可以收集到的,__builtin__.objects不是一个可迭代的类型?出于这个原因,我发现这种行为令人惊讶:

Arr = numpy.array('As Far As I Know'.split())
=> array(['As', 'Far', 'As', 'I', 'Know'], dtype='|S4')
print map(lambda x: x[0],Arr)
=> ['A', 'F', 'A', 'I', 'K']
Run Code Online (Sandbox Code Playgroud)

或者这是否来自list传递给__init__方法的()对象的属性ndarray?但是,为什么我不能list.reverse在数组对象上使用类似的方法,如果它在内部存储为列表?

(作为一方,没有人知道在ndarray对象的每个元素上应用字符串操作的更好方法吗?)

Sve*_*ach 6

numpy.ndarray定义__iter__(),通常(和唯一)机制使类型的实例可迭代.请注意,这numpy.ndarray是一个C扩展类型,但这对于它可迭代的问题无关紧要.您在Python和C扩展类型中定义的两种类型都可以通过定义进行迭代__iter__().