我安装了Sage 4.7.1并遇到了一个奇怪的问题。许多使用deepcopy()和uniq()等函数的旧脚本不再将它们识别为全局名称。我已经能够通过逐个导入python模块来解决这个问题,但这非常繁琐。但是当我启动命令行Sage接口时,我可以在不导入复制模块的情况下键入“list2 = deepcopy(list1)”,这样可以正常工作。如何命令行Sage可以识别全局名称“deepcopy”,但是如果我加载使用相同名称的脚本却无法识别它?
哎呀,抱歉,还不熟悉stackoverflow。我输入:'sage_4.7.1 / sage“来启动命令行界面;然后,我输入”load jbom.py“来加载我在python脚本中定义的所有函数。当我使用脚本中的一个函数时,它运行了几秒钟(复杂的功能),然后点击我使用Sage通常具有的一些函数作为全局名称(deepcopy,uniq等),但由于某种原因,我加载的脚本不知道该函数是什么重申一下,正如我所描述的那样,我的脚本jbom.py曾经是我最后一次从事这项特殊研究的工作。如果我使用'load jbom.py'或'import jbom',也没有区别。两种方法都获得了我在脚本中定义的函数(但在第二种情况下我必须使用jbom。)并且两者都得到关于'deepcopy'不是全局名称的相同错误。
回复帝斯曼:我一直在描述这个问题,我很抱歉。我创建了一个新的脚本'experiment.py',它的第一行是“import jbom”。在experiment.py中执行该函数可识别jbom.py中的函数,但无法识别deepcopy。我尝试将jbom.py加载为“加载jbom.py”,我可以像几个月前一样使用这些函数。那么,这只是在没有正确使用导入/加载等的情况下分层脚本的问题吗?
解决:我将“从sage.all import *”添加到jbom.py的开头,现在我可以加载experiment.py并执行调用jbom.py函数的函数,没有任何问题。从导入/加载的Sage文档中我无法确切地说出我做错了什么。
答案 0 :(得分:0)
好的,这是发生了什么:
您只能import
以.py
结尾的文件(忽略.py[co]
)这些是标准的Python文件且尚未预先制定,因此1/3 == int(0)
,而非{{1} },并且你没有相应的QQ(1)/QQ(3)
来玩。
您可from sage.all import *
和load
attach
和.py
个文件(以及.sage
和.pyx
以及.spyx
)。两者都可以访问Sage定义,但.m
文件没有预先制定(因此.py
使y=17
成为Python y
)而int
文件是(所以.sage
使y=17
成为圣人y
)。
所以这里的Integer
就像在Python中一样,并且你无法访问Sage在范围内的内容。 import jbom
等等很方便,但它们不能很好地扩展到更大的程序。我曾提议过去改进这一点,并使load
脚本少于二等公民,但目前还没有就如何做和能量来达成协议。与此同时,您最好的选择是从.sage
导入。