如何在Python脚本中正确评估Sage代码

0 投票
2 回答
794 浏览
提问于 2025-04-18 12:14

我一直在尝试在Python中执行一个简单的“integrate(x,x)”语句,按照Sage的说明将Sage导入到Python中。以下是我的完整脚本:

    #!/usr/bin/env sage -python

from sage.all import *
def main():
    integrate(x,x)
    pass
main()

当我从命令行运行它时,出现了这个错误:

NameError: global name 'x' is not defined

我尝试在脚本中添加var(x),使用global x,还尝试将integrate(x,x)替换为sage.integrate(x,x),但总是无法成功,总是会出现错误。

我使用的命令是./sage -python /Applications/path_to/script.py

我似乎不明白我哪里出错了。

编辑:我觉得这可能与我“导入”Sage的方式有关。我有一个文件夹,叫做文件夹1,文件夹1里面有“sage”文件夹和“script.py”文件。

我这么想是因为输入“sage.”时没有出现任何自动补全选项。

2 个回答

1

这是Sage的工作原理(请查看文件 src/sage/all_cmdline.py):

from sage.all import *
from sage.calculus.predefined import x

如果你在你的Python文件中加入这些代码行,那么 integrate(x,x) 就能正常工作了。(实际上,sage.calculus.predefined 只是用 sage.symbolic.ring 中的 var 函数来定义 x;这实际上就是调用 SR.var,正如其他回答中提到的那样。不过,如果你想真正模仿Sage的初始化过程,这两行代码就是你需要的。)

2

名字 x 并不是通过 import sage.all 导入的。如果你想定义一个变量 x,你需要使用 var 语句,像这样:

var('x')
integrate(x,x)

或者,更好的是,

x = SR.var('x')
integrate(x,x)

第二个例子不会自动把名字 x 放到全局范围内,所以你需要明确地把它赋值给一个变量。

撰写回答