Python代码工作正常第一次,但失败第二次
问题描述:
我第一次从笔记本电脑上运行的代码块,它工作正常:Python代码工作正常第一次,但失败第二次
#Which letters and how many
letters = ["a","b","c"]
noOfLetters = len(letters)
#Looking for all permutations
resultA = []
from itertools import permutations
for i in range(noOfLetters):
resultA.append(list(permutations(letters,i+1)))
如果我再次运行(无需重新启动内核),我得到的以下错误:
TypeError Traceback (most recent call last)
<ipython-input-5-4050a4ce7a36> in <module>()
7 from itertools import permutations
8 for i in range(noOfLetters):
----> 9 resultA.append(list(permutations(letters,i+1)))
TypeError: 'list' object is not callable
答
假设“记事本”是Jupyter(以前IPython的笔记本电脑),你必须要小心,jupyter保留所有变量的状态。
- >这意味着第二次运行的变量已经初始化为第一次运行结束时的值。
避免这种情况的一种方法是重新启动内核;另一种是删除所有变量;还有一个就是每次运行时初始化所有的变量。
从docs:
To restart the kernel (i.e. the computational engine), click on the menu Kernel -> Restart. This can be useful to start over a computation from scratch (e.g. variables are deleted, open files are closed, etc...).
在这个代码后的某个时刻,你做'名单= '。这会隐藏内置的'list'并导致问题。将它重命名为“lst”或别的东西。尽量不要影响内置插件 –
感谢Adam,确实如此。 – GDP
@GretelDePaepe如果您*必须*使用与内置相同的名称,则一种约定是为该名称附加下划线:例如,在这种情况下,为'list_ =。 。 .'不会覆盖内置的'list'。 – dbliss