So, Python functions can return multiple values. It struck me that it would be convenient (though a bit less readable) if the following were possible.
a = [[1,2],[3,4]] def cord(): return 1, 1 def printa(y,x): print a[y][x] printa(cord())
…but it’s not. I’m aware that you can do the same thing by dumping both return values into temporary variables, but it doesn’t seem as elegant. I could also rewrite the last line as ‘printa(cord()[0], cord()[1])’, but that would execute cord() twice.
Is there an elegant, efficient way to do this? Or should I just see that quote about premature optimization and forget about this?
The
*here is an argument expansion operator… well I forget what it’s technically called, but in this context it takes a list or tuple and expands it out so the function sees each list/tuple element as a separate argument.It’s basically the reverse of the
*you might use to capture all non-keyword arguments in a function definition:prints
(1, 2, 3, 4, 5)does the same.