function call - default value & collecting arguments
Primoz Skale
primoz.skale.lists at gmail.com
Thu Apr 3 16:31:55 EDT 2008
"OKB (not okblacke)" <brenNOSPAMbarn at NObrenSPAMbarn.net> wrote in message
news:Xns9A74ACF8732AEOKB at 199.45.49.11...
> Primoz Skale wrote:
>
>> OK, everything allright till so fair. But! :) Now define third
>> function as:
>>
>> def f(*a):
>> print a[0]
>>
>> In this case, function only prints first argument in the tuple:
>>
>>>>f(1,2,3)
>> 1
>>>>f(3)
>> 3
>>>>f() #no arguments passed
>> Traceback (most recent call last):
>> File "<pyshell#425>", line 1, in <module>
>> f() #no arguments passed
>> File "<pyshell#422>", line 2, in f
>> print a[0]
>> IndexError: tuple index out of range
>>
>> Then I tried to define the function as:
>>
>> def f(*a=(0,)):
>> print a[0] #this should come next, but we get error msg instead,
>> saying
>>
>> SyntaxError: invalid syntax
>>
>> but it does not work this way. Now my 'newbie' question: Why not?
>> :) I wanted to write function in this way, because then we can call
>> function without any arguments, and it would still print 0 (in this
>> case).
>>
>> What I wanted was something like this:
>>
>> def f(*a=(0,)):
>> print a[0]
>>
>>>>f(1,2)
>> 1
>>>>f() #no args passed 0
>
> When you use the *a syntax, you're saying that you want a to
> contain a tuple of all the arguments. When you try *a=(0,), you seem to
> be saying that you want a to hold all the arguments, or, if there are
> none, you want to pretend that it was called with one argument, namely
> 0.
>
> Well, if you want to ensure that there is at least one argument,
> and print that first one, and make it zero if it's not supplied, why are
> you using the *a syntax? You're clearly treating that first argument
> distinctly, since you want to apply a default value to it but not to any
> others. Just do this:
>
> def f(a, *b):
> print a
Thanks! I never thought of that.... :)
P.
>
> --
> --OKB (not okblacke)
> Brendan Barnwell
> "Do not follow where the path may lead. Go, instead, where there is
> no path, and leave a trail."
> --author unknown
More information about the Python-list
mailing list