M.E.Farmer wrote: >>They're both an UNPACK_SEQUENCE byte-code. > > I have dissed it myself ;) > My argument, if you can call it that, is that it is not clear that > Python is going to do a tuple unpacking here or not !
Hmm... Well, I wouldn't say that. I think it's quite clear that Python's doing a tuple unpacking. Just like it always does anytime there's a comma on the left-hand side of an assignment statement. Note that there's nothing that forces you to write the unpack sequence like a tuple display. You can write it like a list display too, and Python will treat it identically: py> def unpack_tuple(t): ... [x, y] = t ... py> dis.dis(unpack_tuple) 2 0 LOAD_FAST 0 (t) 3 UNPACK_SEQUENCE 2 6 STORE_FAST 2 (x) 9 STORE_FAST 1 (y) 12 LOAD_CONST 0 (None) 15 RETURN_VALUE I don't know how UNPACK_SEQUENCE is implemented, but at least on the Python level, no tuple or list is created in the unpacking process. > Seems weird, non-intuitive that a tuple unpacking and tuple creation > have the same bytecode. Sorry, I don't understand. Why do you think this? py> def create_tuple(x, y): ... (x, y) ... py> dis.dis(create_tuple) 2 0 LOAD_FAST 0 (x) 3 LOAD_FAST 1 (y) 6 BUILD_TUPLE 2 9 POP_TOP 10 LOAD_CONST 0 (None) 13 RETURN_VALUE py> def unpack_tuple(t): ... x, y = t ... py> dis.dis(unpack_tuple) 2 0 LOAD_FAST 0 (t) 3 UNPACK_SEQUENCE 2 6 STORE_FAST 2 (x) 9 STORE_FAST 1 (y) 12 LOAD_CONST 0 (None) 15 RETURN_VALUE To me, it looks like tuple creation uses the BUILD_TUPLE op-code, and tuple unpacking uses the UNPACK_SEQUENCE op-code. Could you explain what you meant by "a tuple unpacking and tuple creation have the same bytecode"? STeVe -- http://mail.python.org/mailman/listinfo/python-list