警告: |
从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) |
作者/审查人检查表
检查patchbot Python3兼容性插件的结果名为“next_method”, “oldstyle_print”、“python3”和“raise_statements”(例如,请参阅右侧的列表这个补丁程序报告).
否则,请检查当前分支中更改的每个文件中的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的不兼容性也非常有用。