后记¶
为什么是 Python ?¶
Python的优势¶
Sage的主要实现语言是Python(请参阅 [Py]) ,尽管必须快速的代码是用编译语言实现的。Python有几个优点:
Object saving 在Python中得到了很好的支持。在Python中,广泛支持将(几乎)任意对象保存到磁盘文件或数据库。
极好地支持 documentation 源代码中的函数和包,包括文档的自动提取和所有示例的自动测试。这些示例定期进行自动测试,并保证按指示工作。
Memory management :Python现在有一个经过深思熟虑的、健壮的内存管理器和垃圾收集器,可以正确地处理循环引用,并允许在文件中使用局部变量。
Python 有 many packages 现在,Sage的用户可能会非常感兴趣的功能有:数值分析和线性代数、2D和3D可视化、联网(用于分布式计算和服务器,例如通过TWSTED)、数据库支持等。
Portability: 在大多数平台上,在几分钟内就可以很容易地从源代码编译出Python。
Exception handling: Python有一个复杂的、经过深思熟虑的异常处理系统,即使在它们调用的代码中出现错误,程序也可以优雅地恢复。
Debugger: Python包括一个调试器,因此当代码由于某种原因失败时,用户可以访问广泛的堆栈跟踪,检查所有相关变量的状态,并在堆栈中上下移动。
Profiler: 有一个Python分析器,它运行代码并创建一个报告,详细说明每个函数被调用的次数和时间。
A Language: 而不是编写一个 new language 对于像Magma、Maple、MATHEMICA、Matlab、GP/PARI、GAP、Macaulay 2、Simath等所做的数学,我们使用的是Python语言,这是一种流行的计算机语言,正在由数百名熟练的软件工程师积极开发和优化。Python是一个重要的开源成功案例,具有成熟的开发过程(请参阅 [PyDev]) 。
预解析器:Sage和Python之间的差异¶
Python的一些数学方面可能会令人困惑,因此Sage的行为在几个方面与Python不同。
Notation for exponentiation:
**
与^
。在Python语言中,^
意思是“异或”,而不是求幂,所以在Python语言中我们有>>> 2^8 10 >>> 3^2 1 >>> 3**2 9
这种用法
^
这可能看起来很奇怪,而且对于纯粹的数学研究来说效率很低,因为“异或”函数很少使用。为方便起见,Sage在将所有命令行传递给Python之前预先解析它们,用^
字符串中不包含**
:sage: 2^8 256 sage: 3^2 9 sage: "3^2" '3^2'
Sage中的按位XOR运算符是
^^
。这也适用于inplace运算符^^=
:sage: 3^^2 1 sage: a = 2 sage: a ^^= 8 sage: a 10
Integer division: Python表达式
2/3
并不是数学家所期望的那样。在Python2中,如果m
和n
是整型的,那么m/n
也是一个整数,即的商m
除以n
。因此2/3=0
。在《 Python 3》中,2/3
返回浮点数0.6666...
。在Python2和Python3中,//
是欧几里得除法和2//3
退货0
。我们在Sage解释器中处理这个问题,方法是将整型文字包装在
Integer( )
并使除法成为有理数的构造器。例如:sage: 2/3 2/3 sage: (2/3).parent() Rational Field sage: 2//3 0 sage: int(2)/int(3) # not tested, python2 0
Long integers: 除了C-int之外,Python还具有对任意精度整数的本机支持。这些整数比GMP提供的要慢得多,并且具有使用
L
将它们与int区分开来(这一点短期内不会改变)。Sage使用GMP C库实现了任意精度的整数,并且这些打印不需要L
。
我们没有像一些人对内部项目所做的那样修改Python解释器,而是完全按原样使用Python语言,并为IPython编写了一个预解析器,这样IPython的命令行行为就是数学家所期望的。这意味着任何现有的Python代码都可以在Sage中使用。然而,在编写要导入到Sage中的包时,仍然必须遵守标准的Python规则。
(例如,要安装您在Internet上找到的Python库,请按照说明进行操作,但请运行 sage -python
而不是 python
。这通常意味着要打字 sage -python setup.py install
。)
我想以某种方式做出贡献。我怎么能做到呢?¶
如果您愿意为Sage做出贡献,我们将非常感谢您的帮助!它的范围可以从大量代码贡献到添加到Sage文档,再到报告错误。
浏览Sage网页以获取面向开发人员的信息;在其他内容中,您可以找到按优先级和类别排序的Sage相关项目的长长列表。这个 Sage Developer's Guide 也有有用的信息,您还可以查看 sage-devel
谷歌集团。
我如何引用Sage?¶
如果您使用Sage撰写论文,请参考使用Sage完成的计算,包括
[Sage] SageMath, the Sage Mathematics Software System (Version 8.7),
The Sage Developers, 2019, https://www.sagemath.org.
在您的参考书目中(用您使用的Sage版本替换8.7)。此外,请尝试跟踪Sage的哪些组成部分用于您的计算,例如,Pari?,Gap?,Single?马克西玛?并引用了这些系统。如果您对您的计算所使用的软件有疑问,请随时在 sage-devel
谷歌集团。看见 一元多项式 关于这一点的进一步讨论。
如果您恰好刚刚通读了本教程,并且对花费了多长时间有所了解,请在 sage-devel
谷歌集团。
和Sage一起玩得开心!