[Tutor] Defining variable arguments in a function in python
Steven D'Aprano
steve at pearwood.info
Sat Dec 29 06:01:52 EST 2018
On Sat, Dec 29, 2018 at 11:42:16AM +0530, Karthik Bhat wrote:
> Hello,
>
> I have the following piece of code. In this, I wanted to make use
> of the optional parameter given to 'a', i.e- '5', and not '1'
>
> def fun_varargs(a=5, *numbers, **dict):
[...]
>
> fun_varargs(1,2,3,4,5,6,7,8,9,10,Jack=111,John=222,Jimmy=333)
>
> How do I make the tuple 'number' contain the first element to be 1 and not 2?
You can't. Python allocates positional arguments like "a" first, and
only then collects whatever is left over in *numbers. How else would you
expect it to work? Suppose you called:
fun_varargs(1, 2, 3)
wanting a to get the value 1, and numbers to get the values (2, 3). And
then immediately after that you call
fun_varargs(1, 2, 3)
wanting a to get the default value 5 and numbers to get the values
(1, 2, 3). How is the interpreter supposed to guess which one you
wanted?
If you can think of a way to resolve the question of when to give "a"
the default value, then we can help you program it yourself:
def func(*args, **kwargs):
if condition:
# When?
a = args[0]
numbers = args[1:]
else:
a = 5 # Default.
numbers = args
...
But writing that test "condition" is the hard part.
--
Steve
More information about the Tutor
mailing list