2

以下 lttle 程序使用 Python 3.8 失败,但在 2.7 下可以:

from mpmath import mpf, nsum

def z(n):
    x = [mpf(1) for k in range(1,n)]
    return 99

print (nsum(z, [2,2]))

代码看起来很奇怪,因为它是从一个相当大的程序中缩减而来的。我不能再削减它了。这可以使用https://www.python.org/shell/上的交互式 shell 轻松确认

错误报告是:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.8/site-packages/mpmath/calculus/extrapolation.py", line 1698, in nsum
    return +g()
  File "/usr/lib/python3.8/site-packages/mpmath/calculus/extrapolation.py", line 1745, in <lambda>
    return False, lambda: f(*([0]*len(intervals)))
  File "/usr/lib/python3.8/site-packages/mpmath/calculus/extrapolation.py", line 1777, in g
    s += f(*args)
  File "<stdin>", line 2, in z
TypeError: 'mpf' object cannot be interpreted as an integer

我错过了什么明显的东西吗?

4

1 回答 1

0

nsumn作为mpf传递给z,但range期望:

...int 或任何实现 __index__ 特殊方法的对象。

因此,您可以n显式转换为int,例如:

x = [mpf(1) for k in range(1, int(n))]
于 2019-12-25T15:49:18.597 回答