TypeError: the range object is not callable

TypeError: the range object is not callable

我正在尝试实现一个简单的 python 函数来生成给定 之前所有素数的列表。您可以在下面找到代码片段。

def prime_list(n):
  non = []
  for i in range(2, n+1):
    for j in range(2, n+1):
      if i*j<=n:
        non.append(i*j)
  non.append(1)
  unique = set(non)
  prime = []
  for i in range(1, n+1):
    if i not in unique:
      prime.append(i)

  prime = list(prime)
  return prime    

my_prime = prime_list(100)
print(my_prime)

之后,我运行这个程序,我得到了这个错误:

类型错误:范围对象不可调用

我检查过我是否在任何地方将列表定义为变量,但我没有。

我尝试重新启动内核和 运行 一切。

因为如果你定义了一个名为list的变量,即使你后来删除了它,notebook也会把“list”当作一个变量,直到你重启内核。

重启内核解决了我的问题!

从错误看来,您似乎通过命名变量“range”覆盖了 range 内置函数?

一般从内存中删除一个变量,不用重启notebook内核,可以使用del keyword/builtin.

例如

example = [1,2]

del example

print(example)

# NameError: name 'example' is not defined

即使删除隐藏内置函数名称的变量也能正常工作,并替换对内置函数的引用。

例如

range = [1, 2, 3]       # oops!

del range

for i in range(10):
    print(i)

# 1
# 2
# 3 etc..