What's the main difference between py2 vs py3?

  • From a beginner point of view what is the main changes in our Drawbot code when using Python 2 and Python 3?


  • admin

    For beginners there is not such a big difference:


    All strings are unicode string, so no converting back and forth, but this is actually the best thing!!


    print('hello world') requires brackets ( and )


    Divisions are always floats so no more rounding, this is also a good thing: 1/3-> 0.333333 instead of 0

    You keep the old behaviour with 1//3

    If you dive deeper:


    dict.keys(), dict.values(), dict.items() are not a lists anymore

    Looping (a for loop or a while loop) over a dictionary and changing content of that dictionary is tricky:

    for key in list(myDict.keys()):
        myDict[key] = "changed" + myDict[key]

    There is of course more

  • Thanks! I'll look more into it.

  • I noticed today iterate a dict works also different.
    While translating scripts from py2 to py3 this was a thing...

    If the keys are integers in py2 they will be sorted.
    In py3 the will stay in order as appended to dict.

    print {1:"A",0:"B"} 
    > {0: 'B', 1: 'A'}


    > {1: 'A', 0: 'B'}

    (also it seems print() is not coloured in snippet)

  • @thom It's actually not generally true that keys get sorted in Py2. The order of a dict is in implementation detail that you should not rely on. If you need sorted keys: get sorted keys!

    d = {1:"A",0:"B"}
    > {1: 'A', 0: 'B'}
    > dict_keys([1, 0])
    > [0, 1]

    (Indeed print() not getting colorized may be a bug in the syntax colorizer. Or it's not yet fully Py 3 compatible.)

  • admin

Log in to reply