Python 3.8-3.10中NumPy数组解包为何触发SyntaxError?
语法差异原因解析
这不是旧版本Python的bug,而是版本间语法特性更新导致的差异:
- Python 3.11及后续版本新增了**切片元组内支持解包操作符
***的语法,允许在切片的元组上下文里直接用*展开可迭代对象。 - 而Python 3.8、3.9、3.10不支持该语法,代码里
a[:, *[np.newaxis] * new_dim]的写法会触发SyntaxError——旧版本的语法规则不允许在切片的逗号分隔部分使用*解包。
如果要在旧版本Python里实现同样的维度扩展效果,需要先把解包内容转为元组,写法如下:
import numpy as np a = np.zeros(5) new_dim = 3 a = a[:, tuple([np.newaxis] * new_dim)]
内容的提问来源于stack exchange,提问作者Tom M. Ragonneau
相关产品推荐
相关产品推荐

