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 _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor