为什么 r_[r_] 挂起?

Alb*_*ang 4 python numpy

这一定是最短的 numpy 挂起之一。\n请不要问我到底为什么尝试这个。

\n
from numpy import r_\nr_[r_]\n
Run Code Online (Sandbox Code Playgroud)\n

在线尝试一下!

\n

这是正确的行为(如果是的话:为什么?)还是错误?

\n

wim*_*wim 5

你发现了一个有趣的奇怪现象!它被卡住的原因与挂起的原因相同list(r_),它本质上是在无限循环中尝试迭代无限可迭代。

由于实现的对象__getitem__被认为是 iterabler_因此是 iterable 、 Yieling r_[0]r_[1]r[2]... 等

>>> import numpy as np
>>> it = iter(np.r_)
>>> next(it)
array([0])
>>> next(it)
array([1])
>>> next(it)
array([2])
>>> next(it)
array([3])
...
Run Code Online (Sandbox Code Playgroud)

请注意,r_[obj]迭代obj( source ) 因此r_[r_]将无限期地迭代自身。

  • [迭代器协议](https://docs.python.org/3/library/stdtypes.html#iterator-types)不考虑`__len__`。 (2认同)