[Python-Dev] Anonymous + varargs: possible serious breakage -- please confirm!

Jeremy Hylton jeremy@alum.mit.edu
2001年1月25日 10:20:45 -0500 (EST)


>>>>> "TW" == Thomas Wouters <thomas@xs4all.net> writes:

 TW> On Wed, Jan 24, 2001 at 12:33:43PM -0800, Ka-Ping Yee wrote:
 >> Please try:
 >> >>> def f(a, (b, c), *d):
 >> ... x = 1 ... print a, b, c, d, x ...
 >> >>> f(1, (2, 3), 4)
 >> 1 2 3 Traceback (most recent call last): File "<stdin>", line 1,
 >> in ? File "<stdin>", line 3, in f UnboundLocalError: local
 >> variable 'd' referenced before assignment
 >> >>>
 >> In Python 1.5.2, this prints "1 2 3 (4,)" as expected.
 >> I only have 1.5.2 and 2.1a1 to test. I hope this problem isn't
 >> present in 2.0...
 TW> It isn't present in 2.0. This is probably related to Jeremy's
 TW> changes in the call mechanism or the compiler track, though
 TW> Jeremy himself is the best person to claim that for sure :)
The bug is in the compiler. It creates varnames while it is parsing
the argument list. While I got the handling of the anonymous tuples
right, I forgot to insert *varargs or **kwargs in varnames *before*
the names defined in the tuple.
I will fix it real soon now.
 >> Note that test_inspect was the only test to fail! It might be
 >> the only test that checks anonymous and *varargs at the same
 >> time. (Yet another reason to put inspect in the core...)
 TW> Well, this is not an inspect-specific test, so it shouldn't *be*
 TW> in test_inspect, it should be in test_extcall :)
It should probably be in test_grammar. The ext call mechanism is only
invoked when the caller uses a form like 'f(*arg)'. Perhaps the name
"ext call" isn't very clear.
Jeremy

AltStyle によって変換されたページ (->オリジナル) /