## page was renamed from PrintFunction ||<#FF6347>Warning: || Starting from version 9.0, the default distributed version of Sage is using Python 3. See [[Python3-Switch]] for more information.|| = Advice on writing Python3-compatible code = It is now required that the code inside sage must be Python3 code. Let us describe a few important points. == Do not use xrange == You can use xrange only inside Cython files (*.pyx). == Do not use it.next() to advance iterators == Use instead the syntax "next(it)". == Do not use .itervalues, .iteritems or .iterkeys == You can use .values, .items and .keys (that are not iterators in Python2). == Do not use cmp() == The cmp global function is gone in Python3 and must be avoided completely. SageMath now has a "richcmp" function that can sometimes replace "cmp". == Behaviour of print == The behaviour of print differs in Python 2 and in Python 3. SageMath code is written in Python3. In the Python 3 syntax, print is a function. The easiest way to achieve compatibility with Python3 is to always use '''print(...)''' with a single string inside the parentheses. For example, '''print("He has eaten {} bananas".format(10))''' will work in both Python 2 and Python 3 and give the same result. Here below are some instructions for going from Python 2-only print to Python 3-only print. ||<#FFFF66>To convert '''print''' from Python 2 to Python 3, you basically need to add parentheses, and write '''print("x")''' instead of '''print "x"'''.|| Here is a conversion table to help you adapt your code in more complex cases: ||<#98FF98> Python 2 ||<#98FF98> Python 3 || || print a || print(a) || || print a, b, c || print(a, b, c) || || print x, || print(x, end=" ") || || print >>sys.stderr, x || print(x, file=sys.stderr) || == Author/Reviewer's checklist == Check the result of the patchbot Python3 compatibility plugins named "next_method", "oldstyle_print", "python3" and "raise_statements" (for example, see the list on the right at [[https://patchbot.sagemath.org/ticket/21996/|this patchbot report]]). Otherwise, check Python 3 syntax errors in every file changed in the current branch: {{{ git diff --name-only develop your-new-branch | xargs -n 1 python3 -m py_compile }}} Check Python 3 syntax errors in every Python file of Sage library (see this [[https://groups.google.com/d/msg/sage-devel/dwEABlLOWqI/NUNOARrLCAAJ|thread]]): {{{ find src/sage -name '*.py' | xargs -n 1 python3 -m py_compile }}} If possible, include the following imports to the modules you are adding or working on: {{{ from __future__ import division, absolute_import, print_function }}} The command pyflakes, when installed with pip3, is also very useful to detect incompatibilities with Python3.