警告:

从9.0版本开始,Sage的默认分布式版本是使用Python 3。请参见Python3-交换机了解更多信息。

编写Python3兼容代码的建议

现在要求sage中的代码必须是Python3代码。让我们描述几个要点。

不使用xrange

您只能在Cython文件(*.pyx)中使用xrange。

不要使用it.next()来推进迭代器

请改用语法“next(it)”。

不要使用.itervalues、.iteritems或.iterkeys

您可以使用.values、.items和.keys(它们不是Python2中的迭代器)。

不要使用cmp()

cmp全局函数在Python3中已不存在,必须完全避免。

SageMath软件现在有一个“richcmp”函数,有时可以替换“cmp”。

印刷行为

Python 2和Python3中的打印行为不同。

SageMath软件代码是用Python3编写的。

在Python 3语法中,print是一个函数。

实现与Python3兼容性的最简单方法是始终使用打印(…)括号内只有一个字符串。

例如,打印(“他吃了{}香蕉”.format(10))将在Python 2和Python3中工作,并给出相同的结果。

下面是从Python仅2打印到Python3打印的一些说明。

要转换打印从Python2到Python3,基本上需要添加括号,然后编写打印(“x”)而不是打印“x”.

下面是一个转换表,可帮助您在更复杂的情况下调整代码:

Python 2

蟒蛇3

打印

打印(a)

打印a、b、c

打印(a、b、c)

打印x,

打印(x,end=“”)

打印>>sys.stderr,x

打印(x,file=sys.stderr)

作者/审查人检查表

检查名为“next_method”、“oldstyle_print”、“Python3”和“raise_statements”的patchbot Python3兼容性插件的结果(例如,请参阅右侧的列表这个补丁程序报告).

否则,请在当前分支中更改的每个文件中检查Python 3语法错误:

git diff--仅名称开发您的新分支|xargs-n 1 python3-m py_compile

检查Sage库的每个Python文件中的Python3语法错误(请参阅线)以下为:

查找src/sage-name'*.py'| xargs-n 1 python3-m py_compile

如果可能,请将以下导入内容包含到您正在添加或处理的模块中:

来自__future__import部门,绝对导入,打印函数

当与pip3一起安装时,命令pyflakes对于检测与Python3的不兼容性也非常有用。

Python3兼容代码(上次编辑时间:2020-09-12 07:11:42查波顿)