[Python-Dev] 2.7 Release? 2.7 == last of the 2.x line?
Michael Foord
fuzzyman at voidspace.org.uk
Thu Nov 5 21:22:43 CET 2009
Martin v. Löwis wrote:
>> Mike Krell wrote:
>>
>>> Well, 3to2 would then be an option for you: use Python 3 as the source
>>> language.
>>>
>> Making life easier for 3to2 is an *excellent* rationale for backports.
>>
>>
>
> I'm skeptical. If new features get added to 2.7: why would that simplify
> 3to2? It couldn't *use* these features, since it surely would have to
> support 2.6 and earlier as well.
>
> Not sure what 3to2 would do about difficult-to-convert 3.x feature (as,
> perhaps, the nonlocal keyword). If it currently gives up, it then may
> offer you to restrict your target versions to 2.7+. Not sure whether
> users would use that option, though - perhaps they rather stop using
> nonlocal in 3.x if 3to2 cannot support it for all 2.x versions they are
> interested in.
>
I would have thought you could translate nonlocal with the following:
Python 3:
def scope():
name = value
do_something_with(name)
def inner():
nonlocal name
name = new_value
do_something_else(name)
Python 2
def scope():
name = [value]
do_something_with(name[0])
def inner():
name[0] = new_value
do_something_else(name[0])
I would love to see nonlocal backported to 2.7 as it cleans up a simple
pattern that I use relatively often for testing.
Suppose you have an class and you want to test that method a calls
method b, in Python 2 you might write something like this:
def test_method_a_calls_method_b():
instance = SomeClass()
was_called = []
def method_b():
was_called.append(True)
instance.method_b = method_b
instance.method_a()
assert was_called == [True]
in Python 3 you can replace this with the slightly nicer:
def test_method_a_calls_method_b():
instance = SomeClass()
was_called = False
def method_b():
nonlocal was_called
was_called = True
instance.method_b = method_b
instance.method_a()
assert was_called
As to the argument that releasing 2.7 is pointless as few people would
use it for several years, the success of Python 2.6 shows that although
*many* people don't / can't use new versions of Python for several years
many other people are able to and do use new versions of Python.
All the best,
Michael Foord
> Perhaps 3to2 has a work-around that still provides a good backport in
> most cases. Then, the backport would not make the tool any simpler: if
> 3to2 would start using the backport, it would actually get more
> complicated (not easier), as it now needs to support two cases.
>
> Regards,
> Martin
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/fuzzyman%40voidspace.org.uk
>
--
http://www.ironpythoninaction.com/
More information about the Python-Dev
mailing list