On 2020-09-21 09:48, Stavros Macrakis wrote: >> def fn(iterable): >> x, = iterable >> return x > > Thanks, Tim! I didn't realize that you could write (x,) on the LHS! > Very nice, very Pythonic!
It also expands nicely for other cases, so you want the 3-and-only-3 first values with errors for too many or too few? x, y, z = iterable x, y, z = (1, 2, 3) The (x,) version is just the single case. And it's fast—a single Python UNPACK_SEQUENCE opcode >>> dis.dis(fn) 2 0 LOAD_FAST 0 (i) 2 UNPACK_SEQUENCE 1 4 STORE_FAST 1 (x) 3 6 LOAD_FAST 1 (x) 8 RETURN_VALUE Though now I'm wondering if there's a way to skip the STORE_FAST/LOAD_FAST instructions and create a function that generates the opcode sequence UNPACK_SEQUENCE 1 RETURN_VALUE :-) (totally tangential ramblings) -tkc -- https://mail.python.org/mailman/listinfo/python-list