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)
但上述内容不起作用,x
和y
仍在,x=y**3
和y=99
。
同样,我知道我最后可以做del(x)
和del(y)
,但我正在从文件中读取变量的名称,并且名称在列表中。
我只能像上面那样将符号放在一个变量中,但不知道如何迭代这个元组,然后在每个条目上使用del()
来删除迭代结束时上面定义的相应符号symbols
命令。
我不知道正确的语法应该是什么。
我使用的是Python 3.6.5 。
答案 0 :(得分:1)
Delete all objects in a list中解释了您的尝试不起作用的原因 - 当循环x
时,您正在删除对对象的附加引用(在迭代过程中创建),而原始引用保留在地点。
您可以通过globals()
访问y
和symbolsToDelete = ('x', 'y')
for z0 in symbolsToDelete:
del globals()[z0]
,如下所示
{{1}}