Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sage
Path: blob/develop/src/doc/zh/tutorial/afterword.rst
4086 views
*********
后记
*********

为什么选择 Python?
===================

Python 的优势
-------------

尽管必须快速执行的代码是用编译型语言实现的,但 Sage 的主要实现语言是 Python(见 [Py]_ )。
Python 具有以下几点优势:


-  **对象保存** 在 Python 中得到了很好的支持。Python 广泛支持将(几乎)任意对象保存到磁盘文件或数据库中。

-  源代码中对函数和包的 **文档** 支持非常好,包括自动提取文档和自动测试所有示例。
   这些示例会定期自动测试,并保证如预期工作。

-  **内存管理**:Python 现有的内存管理器和垃圾收集器设计精巧且强大,
   可以正确处理循环引用,并允许文件中的局部变量。

-  Python 拥有许多对 Sage 用户非常有用的 **包**:数值分析和线性代数,2D 和 3D 可视化,
   网络(用于分布式计算和服务,例如通过 twisted),数据库支持等。

-  **可移植性**:Python 在大多数平台上,只需几分钟即可轻松从源代码编译 Python。

-  **异常处理**:Python 拥有复杂且精巧的异常处理系统,即使代码出现错误,程序也能优雅地恢复。

-  **调试器**:Python 包含调试器,因此当代码由于某种原因失败时,
   用户可以访问详尽的堆栈跟踪,检查所有相关变量的状态,并上下移动堆栈。

-  **性能分析器**:Python 拥有性能分析器,它会运行代码并创建一份详细报告,说明每个函数被调用的次数和时间。

-  **一门语言**:不同于 Magma、Maple、Mathematica、Matlab、GP/PARI、GAP、Macaulay 2、Simath 等
   那样为数学编写一门 **新语言**,我们使用 Python 语言,它是一种流行的计算机语言,
   由数百名经验丰富的软件工程师积极开发和优化。Python 是一个重要的开源成功案例,拥有成熟的开发流程(见 [PyDev]_ )。


.. _section-mathannoy:

预解析器:Sage 与 Python 之间的区别
-----------------------------------

Python 的一些数学方面可能会令人困惑,因此 Sage 在多个方面的行为与 Python 不同。


-  **指数运算符的表示法**: ``**`` vs ``^``。在 Python 中,
   ``^`` 表示“异或”,而不是指数运算。因此在 Python 中我们有:

   .. CODE-BLOCK:: pycon

       >>> 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 中的按位异或运算符是 ``^^``。这也适用于就地运算符对于就地运算符 ``^^=``:

   ::

       sage: 3^^2
       1
       sage: a = 2
       sage: a ^^= 8
       sage: a
       10

-  **整数除法**:Python 表达式 ``2/3`` 并不像数学家们所预期的那样:``2/3`` 返回浮点数 ``0.6666...``。
   请注意 ``//`` 是欧几里得除法,``2//3`` 返回 ``0``。

   我们在 Sage 解释器中通过将整型字面量包装在 ``Integer( )`` 中,并使除法作为有理数的构造函数来处理这个问题。例如:

   ::

       sage: 2/3
       2/3
       sage: (2/3).parent()
       Rational Field
       sage: 2//3
       0

-  **长整数**:Python 原生支持除 C int 类型外的任意精度整数。
   这些原生整数的性能显著低于 GMP 所提供的。Sage 使用 GMP C 库来实现任意精度整数。


与某些人为了内部项目修改 Python 解释器不同,我们完全按照原样使用 Python 语言,
并为 IPython 编写预解析器,使 IPython 的命令行行为符合数学家的预期。
这意味着任何现有的 Python 代码都可以在 Sage 中使用。
然而,仍需遵守标准的 Python 规则,以便编写能够导入 Sage 的包。

(例如,要安装在互联网上找到的 Python 库,请按照说明进行操作,
但使用 ``sage -python`` 而不是 ``python``。
通常这意味着输入 ``sage -python setup.py install``。)

我想做出一些贡献,我应该怎么做?
================================

如果你想为 Sage 做出贡献,我们会非常感谢你的帮助!贡献可以从实质性代码贡献到向 Sage 添加文档或报告错误。

浏览 Sage 网页以获取开发者信息。你还可以找到一份按优先级和类别排序的 Sage 相关项目列表。
`Sage 开发者指南 <http://doc.sagemath.org/html/en/developer/>`_ 也有一些有用的信息,
你还可以查看 ``sage-devel`` Google 讨论组。

如何引用 Sage?
===============

如果你在论文中使用了 Sage,当引用使用 Sage 的计算时,包含以下内容:
如果你使用 Sage 撰写论文,请将以下内容添加到参考文献中来引用使用 Sage 完成的计算

.. CODE-BLOCK:: text

    [Sage] SageMath, the Sage Mathematics Software System (Version 8.7),
           The Sage Developers, 2019, https://www.sagemath.org.

(将 8.7 替换为你使用的 Sage 版本)。此外,请尝试追踪在计算中使用了哪些 Sage 组件,
例如 PARI?, GAP?, Singular?, Maxima? 并引用这些系统。如果你不确定计算使用了哪个软件,
可以随时在 ``sage-devel`` Google 讨论组上提问。有关这一点的进一步讨论,请参阅 :ref:`section-univariate`。

------------

如果你恰好刚刚读完这篇教程,并且知道花了多长时间,请在 ``sage-devel`` Google 讨论组上告诉我们。

祝使用 Sage 愉快!