如何删除所有已定义的SymPy符号而不明确列出它们?

时间:2018-06-19 01:28:32

标签: python sympy

SymPy和Python新手在这里。

我运行一个迭代许多测试文件的脚本。每个文件定义一组要使用的符号。在每次循环迭代结束时,我想删除之前使用symbols()语句创建的所有符号,仅此而已,因为我正在使用其他非符号变量。

我无法执行del(x)del(y),因为每次迭代都会加载一组不同的符号。

我可以列出列表或元组中使用的符号列表,然后在每次迭代结束时,遍历创建的符号列表,并使用del一次删除一个符号。我无法让它发挥作用。

这是一个例子。

 from sympy import *
 x,y = symbols('x y')
 symbolsToDelete = (x,y) #I also tried symbolsToDelete = ('x','y')

 x=y**3
 y=99

 #now I want to delete all symbols defined above. But I can't
 #use del(x) or del(y) explicitly. So I tried

 for z0 in symbolsToDelete:
     del(z0)

但上述内容不起作用,xy仍在,x=y**3y=99

同样,我知道我最后可以做del(x)del(y),但我正在从文件中读取变量的名称,并且名称在列表中。

我只能像上面那样将符号放在一个变量中,但不知道如何迭代这个元组,然后在每个条目上使用del()来删除迭代结束时上面定义的相应符号symbols命令。

我不知道正确的语法应该是什么。

我使用的是Python 3.6.5

1 个答案:

答案 0 :(得分:1)

Delete all objects in a list中解释了您的尝试不起作用的原因 - 当循环x时,您正在删除对对象的附加引用(在迭代过程中创建),而原始引用保留在地点。

您可以通过globals()访问ysymbolsToDelete = ('x', 'y') for z0 in symbolsToDelete: del globals()[z0] ,如下所示

{{1}}