【问题标题】:How to delete all defined SymPy symbols without explicitly listing them?如何删除所有定义的 SymPy 符号而不明确列出它们?
【发布时间】:2018-06-19 01:28:31
【问题描述】:

这里是 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() 以在迭代结束时使用 @987654333 删除上面定义的相应符号@ 命令。

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

我正在使用 Python 3.6.5

【问题讨论】:

  • 顺便说一句:在y=99 之后,Python 变量y 不再是SymPy 符号,它只是一个Python 整数99。之前的赋值y = symbols('y') 完全被遗忘了。将 SymPy 符号视为“变量”是不可取的,因为它们不会变化:它们是不可变的,它们不能被“赋值”。

标签: python sympy


【解决方案1】:

Delete all objects in a list 中解释了您的尝试无效的原因 - 当循环 [x, y] 时,您正在删除对对象的附加引用(在迭代过程中创建),而原始引用保持不变。

您可以通过globals() 访问它们来删除xy,如下所示

symbolsToDelete = ('x', 'y')

for z0 in symbolsToDelete:
    del globals()[z0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2019-01-10
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多