On Mon, 29 Oct 2007 13:52:04 +0000, Armando Serrano Lombillo wrote: > Why does Python give an error when I try to do this: > >>>> len(object=[1,2]) > Traceback (most recent call last): > File "<pyshell#40>", line 1, in <module> > len(object=[1,2]) > TypeError: len() takes no keyword arguments > > but not when I use a "normal" function: > >>>> def my_len(object): > return len(object) > >>>> my_len(object=[1,2]) > 2
Because len() takes no keyword arguments, just like it says, but my_len() is written so it DOES take a keyword argument. When you call a function foo(object=[1,2]) you are instructing Python to bind the value [1,2] to the keyword argument "object". But if the function doesn't have a keyword argument named "object" then it will fail immediately. Since len() doesn't have ANY keyword arguments, naturally it doesn't have one called "object". You can see the same effect here: >>> def my_len2(*args): ... return len(arg[0]) ... >>> my_len2(object=[1,2]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: my_len2() got an unexpected keyword argument 'object' Apart from the error message being slightly different, many (most? all?) of the built in functions are like my_len2(). You may be thinking that keyword arguments are the equivalent of this: object=[1,2] len(object) That is not the case. They are not at all equivalent. -- Steven. -- http://mail.python.org/mailman/listinfo/python-list