Differences between revisions 4 and 7 (spanning 3 versions)
Revision 4 as of 2019-10-31 05:56:36
Size: 785
Editor: vdelecroix
Comment:
Revision 7 as of 2019-10-31 06:11:51
Size: 2341
Editor: vdelecroix
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
= Main caveat = = Main caveat from writing Python 3 Sagemath code when you are used to Python 2 =
Line 5: Line 5:
== range and xrange == We list the most visible changes that any user would certainly run into the first time she uses a Python 3 based version when she used to run a Python 2 based one. This page is not intended to be a complete manual of the differences but a short page of what you need to know to get started. The [[https://docs.python.org/3/whatsnew/3.0.html|What's new page of the Python official website]] provides more technical details.
 
== 1. print ==

In Python 2, `print` is a keyword (as `for`, `if`, etc)
{{{#!highlight python
sage-8.9: print "hello", 1, 2
hello 1 2
}}}

In Python 3, `print` becomes a function
{{{#highlight python
sage-9.0: print("hello", 1, 2)
hello 1 2
}}}
Writing a print statement without the parenthesis results in a `SyntaxError`
{{{#highlight python
sage: print "hello", 1, 2
  File "<ipython-input-9-e91077222f2e>", line 1
    print "hello", Integer(1), Integer(2)
                ^
SyntaxError: invalid syntax
}}}
One cool thing about this `print` function is that it takes argument
{{{#highlight python

}}}

== 2. range and xrange ==
Line 27: Line 55:

== 3. strings, unicode and bytes ==

In Python 2 a chain of characters between simple, double or triple quotes creates an ascii string. To create a unicode string one has to use the prefix `u` (which remains valid in Python 3).

In Python 3, a chain of characters between quote will gives rise to a unicode string. To create specifically an ascii string one has to use the prefix `b` (which is already valid in Python 2).

Warning:

Starting from version 9.0, the default distributed version of Sage is using Python 3. See Python3-Switch for more information.

Main caveat from writing Python 3 Sagemath code when you are used to Python 2

We list the most visible changes that any user would certainly run into the first time she uses a Python 3 based version when she used to run a Python 2 based one. This page is not intended to be a complete manual of the differences but a short page of what you need to know to get started. The What's new page of the Python official website provides more technical details.

1. print

In Python 2, print is a keyword (as for, if, etc)

   1 sage-8.9: print "hello", 1, 2
   2 hello 1 2

In Python 3, print becomes a function {{{#highlight python sage-9.0: print("hello", 1, 2) hello 1 2 }}} Writing a print statement without the parenthesis results in a SyntaxError {{{#highlight python sage: print "hello", 1, 2

  • File "<ipython-input-9-e91077222f2e>", line 1

    • print "hello", Integer(1), Integer(2)
      • ^

SyntaxError: invalid syntax }}} One cool thing about this print function is that it takes argument {{{#highlight python

}}}

2. range and xrange

In Python range is a function that returns a list.

   1 sage-8.9: range(5)
   2 [0, 1, 2, 3, 4]
   3 sage-8.9: type(range(5))
   4 <type 'list'>

In Python 3, range is an object that somehow behave as a list (ie elements can still be acessed with square bracket, it has a length, etc) but it is not a list.

   1 sage-9.0: range(5)
   2 range(0, 5)
   3 sage-9.0: range(5)[2]
   4 2
   5 sage-9.0: range(5)[1::2]
   6 range(1, 5, 2)
   7 sage-9.0: type(range(5))
   8 <class 'range'>

The iterator xrange is no longer valid in Python 3 simply use range instead.

3. strings, unicode and bytes

In Python 2 a chain of characters between simple, double or triple quotes creates an ascii string. To create a unicode string one has to use the prefix u (which remains valid in Python 3).

In Python 3, a chain of characters between quote will gives rise to a unicode string. To create specifically an ascii string one has to use the prefix b (which is already valid in Python 2).

Python3-user (last edited 2020-01-02 08:29:00 by chapoton)