* Rhodri James:
On Tue, 20 Oct 2009 22:42:07 +0100, Alf P. Steinbach <al...@start.no> wrote:

[snip]

canvas.create_oval( bbox, fill = "PeachPuff" )

[snip]

It worked nicely, and I thought this code was fairly perfect until I started studying the language reference.

It seems that formally correct code should apply the scatter operator to the tuple, like this:


canvas.create_oval( *bbox, fill = "PeachPuff" )


And this /also/ works nicely!

I think it's this latter that is correct, and that the former just worked by accident, due to e.g. the way that some C function parses arguments or such?

But I'm unable to figure it out, so, what's correct (both? one?), and assuming it's the latter that's correct, would the first version still work in practice regardless of Python / Tkinter implementation?

No.  Tkinter.py goes to some lengths to make both of these work, unpacking
bbox if it happens to be a tuple (or packing if it wasn't; I admit I
didn't look at Tkinter.py very hard!)

Thanks, I now just found this code in [Tkinter.py]

<code>
    def _create(self, itemType, args, kw): # Args: (val, val, ..., cnf={})
        """Internal function."""
        args = _flatten(args)
        cnf = args[-1]
        if type(cnf) in (DictionaryType, TupleType):
            args = args[:-1]
        else:
            cnf = {}
        return getint(self.tk.call(
            self._w, 'create', itemType,
            *(args + self._options(cnf, kw))))
</code>

and although I don't understand it all it seems indeed to deal specially with a dictionary or tuple as argument.

However I didn't find that documented anywhere.

I guess I'll find that sooner or later... :-)


As to which of the approaches is correct, the answer is whichever one
works for a given function.  It's rare to see the second version, partly
because it's rare to have a tuple in hand that you want to unpack like
that if you don't need to.  However, generally speaking a function will
expect a tuple or not; libraries that can cope with either are the
exception rather than the rule.


Cheers & thanks again, that cleared it up,

- Alf
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to