警告: |
从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的不兼容性也非常有用。