如何在Python脚本中正确评估Sage代码
我一直在尝试在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
放到全局范围内,所以你需要明确地把它赋值给一个变量。