myths about python 3

Lie Ryan lie.1296 at gmail.com
Wed Jan 27 09:42:21 EST 2010


On 01/28/10 01:32, Jean-Michel Pichavant wrote:
> Daniel Fetchinson wrote:
>>>> Hi folks,
>>>>
>>>> I was going to write this post for a while because all sorts of myths
>>>> periodically come up on this list about python 3. I don't think the
>>>> posters mean to spread false information on purpose, they simply are
>>>> not aware of the facts.
>>>>
>>>> My list is surely incomplete, please feel free to post your favorite
>>>> misconception about python 3 that people periodically state, claim or
>>>> ask about.
>>>>
>>>> 1. Print statement/function creates incompatibility between 2.x and
>>>> 3.x!
>>>>
>>>> Certainly false or misleading, if one uses 2.6 and 3.x the
>>>> incompatibility is not there. Print as a function works in 2.6:
>>>>
>>>> Python 2.6.2 (r262:71600, Aug 21 2009, 12:23:57)
>>>> [GCC 4.4.1 20090818 (Red Hat 4.4.1-6)] on linux2
>>>> Type "help", "copyright", "credits" or "license" for more information.
>>>>      
>>>>>>> print( 'hello' )
>>>>>>>             
>>>> hello
>>>>      
>>>>>>> print 'hello'
>>>>>>>             
>>>> hello
>>>>       2. Integer division creates incompatibility between 2.x and 3.x!
>>>>
>>>> Again false or misleading, because one can get the 3.x behavior with
>>>> 2.6:
>>>>
>>>> Python 2.6.2 (r262:71600, Aug 21 2009, 12:23:57)
>>>> [GCC 4.4.1 20090818 (Red Hat 4.4.1-6)] on linux2
>>>> Type "help", "copyright", "credits" or "license" for more information.
>>>>      
>>>>>>> 6/5
>>>>>>>             
>>>> 1
>>>>      
>>>>>>> from __future__ import division
>>>>>>> 6/5
>>>>>>>             
>>>> 1.2
>>>>
>>>>
>>>> Please feel free to post your favorite false or misleading claim about
>>>> python 3!
>>>>       
>>> Well, I see two false or misleading claims just above - namely that
>>> the two claims above are false or misleading. They tell just half of
>>> the story, and that half is indeed easy. A Python 3 program can be
>>> unchanged (in the case of print) or with only trivial modifications
>>> (in the case of integer division) be made to run on Python 2.6.
>>>     
>>
>> Okay, so we agree that as long as print and integer division is
>> concerned, a program can easily be written that runs on both 2.6 and
>> 3.x.
>>
>> My statements are exactly this, so I don't understand why you disagree.
>>
>>  
>>> The other way around this is _not_ the case.
>>>     
>>
>> What do you mean?
>>
>>  
>>> To say that two things are
>>> compatible if one can be used for the other, but the other not for the
>>> first, is false or misleading.
>>>     
>>
>> I'm not sure what you mean here. Maybe I didn't make myself clear
>> enough, but what I mean is this: as long as print and integer division
>> is concerned, it is trivial to write code that runs on both 2.6 and
>> 3.x. Hence if someone wants to highlight incompatibility (which surely
>> exists) between 2.6 and 3.x he/she has to look elsewhere.
>>
>> Cheers,
>> Daniel
>>
>>   
> How would you write in python 2.6
> 
> if print:
>    print('Hello')
> 
> ---
> 
> def myPrint(*args):
>    for arg in args:
>        sys.stdout.write(str(arg))
> 
> print = myPrint
> 
> JM


from __future__ import print_function

if print:
    print('Hello')

def myPrint(*args):
   for arg in args:
       sys.stdout.write(str(arg))

print = myPrint



More information about the Python-list mailing list