Why does Python give an error when I try to do this:
>>len(object=[1,2])
Traceback (most recent call last):
File "<pyshell#4 0>", 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 10 5114
Armando Serrano Lombillo <ar******@gmail .comwrote:
Why does Python give an error when I try to do this:
>>>len(object =[1,2])
Traceback (most recent call last):
File "<pyshell#4 0>", 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(objec t=[1,2])
2
At the C level there are several options for how you define a function
callable from Python. The most general form is
METH_VARARGS|ME TH_KEYWORDS which accepts both a tuple of arguments and a
dictionary of keyword arguments. These then have to be parsed to find
the actual arguments.
Many of the builtin functions use only METH_VARARGS which means they
don't support keyword arguments. "len" is even simpler and uses an
option METH_O which means it gets a single object as an argument. This
keeps the code very simple and may also make a slight difference to
performance.
I don't know if the reason that most builtin functions don't accept
keywords is just historical (someone would have to go through a lot of
code and add keyword argument names) or if there really is any
measurable performance difference to not using the METH_KEYWORDS option.
Being able to write less C code may be the main factor.
Armando Serrano Lombillo a écrit :
Why does Python give an error when I try to do this:
>>>len(object =[1,2])
Traceback (most recent call last):
File "<pyshell#4 0>", 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(objec t=[1,2])
2
In the second case, the name of the argument *is* 'object'. Which is not
the case for the builtin len (which, fwiw, has type
'builtin_functi on_or_method', not 'function', so inspect.getargs pec
couldn't tell me more).
<ot>
While we're at it, you should avoid using builtin's names for
identifiers - here, using 'object' as the arg name shadows the builtin
'object' class).
</ot>
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#4 0>", 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(objec t=[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(objec t=[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.
Bruno Desthuilliers <br************ ********@wtf.we bsiteburo.oops. com>
wrote:
In the second case, the name of the argument *is* 'object'. Which is not
the case for the builtin len (which, fwiw, has type
'builtin_functi on_or_method', not 'function', so inspect.getargs pec
couldn't tell me more).
<ot>
While we're at it, you should avoid using builtin's names for
identifiers - here, using 'object' as the arg name shadows the builtin
'object' class). </ot>
I think you are being a little bit unfair here: help(len) says:
len(...)
len(object) -integer
Return the number of items of a sequence or mapping.
which implies that the argument to len has the name 'object' (although in
fact it doesn't have a name). The OP was simply asking about the difference
in calling conventions, not proposing to write code using 'object' as the
argument name.
><ot>
>While we're at it, you should avoid using builtin's names for identifiers - here, using 'object' as the arg name shadows the builtin 'object' class). </ot>
I think you are being a little bit unfair here: help(len) says:
len(...)
len(object) -integer
Return the number of items of a sequence or mapping.
which implies that the argument to len has the name 'object' (although in
fact it doesn't have a name).
And to confound matters even further for the uninitiated, http://docs.python.org/lib/built-in-funcs.html#l2h-45
says that it's "len(s)" instead (but "len(s=[])" doesn't work either)
-tkc
On Oct 29, 3:10 pm, Duncan Booth <duncan.bo...@i nvalid.invalidw rote:
Armando Serrano Lombillo <arser...@gmail .comwrote:
Why does Python give an error when I try to do this:
>>len(object=[1,2])
Traceback (most recent call last):
File "<pyshell#4 0>", 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
At the C level there are several options for how you define a function
callable from Python. The most general form is
METH_VARARGS|ME TH_KEYWORDS which accepts both a tuple of arguments and a
dictionary of keyword arguments. These then have to be parsed to find
the actual arguments.
Many of the builtin functions use only METH_VARARGS which means they
don't support keyword arguments. "len" is even simpler and uses an
option METH_O which means it gets a single object as an argument. This
keeps the code very simple and may also make a slight difference to
performance.
I don't know if the reason that most builtin functions don't accept
keywords is just historical (someone would have to go through a lot of
code and add keyword argument names) or if there really is any
measurable performance difference to not using the METH_KEYWORDS option.
Being able to write less C code may be the main factor.
Ok. I was suspecting something like this. Performance issues aside, I
think it would be a good idea if built-in functions behaved exactly
the same as normal functions.
BTW, I came into this problem when trying to use functools.parti al:
import functools
getattrF = functools.parti al(getattr, default=False)
which I think should have worked if getattr behaved as normal
functions do.
In the end I did:
def getattrF(object , name):
return getattr(object, name, False)
Any better idea?
On Oct 29, 3:20 pm, Bruno Desthuilliers <bruno.
42.desthuilli.. .@wtf.websitebu ro.oops.comwrot e:
Armando Serrano Lombillo a écrit :
Why does Python give an error when I try to do this:
>>len(object=[1,2])
Traceback (most recent call last):
File "<pyshell#4 0>", 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
In the second case, the name of the argument *is* 'object'. Which is not
the case for the builtin len (which, fwiw, has type
'builtin_functi on_or_method', not 'function', so inspect.getargs pec
couldn't tell me more).
so that's the point, built-in functions don't behave as normal
functions.
<ot>
While we're at it, you should avoid using builtin's names for
identifiers - here, using 'object' as the arg name shadows the builtin
'object' class).
</ot>
As Duncan points out, I was using the name object because it's what
you get when you type help(len) (or in the calltips, or in). Anyway, I
don't think there's any harm in overriding a builtin name in such a
small scope (the object=[1,2] won't shadow the built-in object outside
of the function).
On Mon, 29 Oct 2007 08:34:58 -0700, Armando Serrano Lombillo wrote:
On Oct 29, 3:10 pm, Duncan Booth <duncan.bo...@i nvalid.invalidw rote:
>> I don't know if the reason that most builtin functions don't accept keywords is just historical (someone would have to go through a lot of code and add keyword argument names) or if there really is any measurable performance difference to not using the METH_KEYWORDS option. Being able to write less C code may be the main factor.
Ok. I was suspecting something like this. Performance issues aside, I
think it would be a good idea if built-in functions behaved exactly
the same as normal functions.
As Steven D'Aprano showed they behave like normal functions. Even pure
Python functions can have arguments without names:
def spam(*args):
pass
Ciao,
Marc 'BlackJack' Rintsch
"Tim Chase" <py*********@ti m.thechases.com >
I think you are being a little bit unfair here: help(len) says:
len(...)
len(object) -integer
Return the number of items of a sequence or mapping.
which implies that the argument to len has the name 'object' (although in
fact it doesn't have a name).
And to confound matters even further for the uninitiated,
http://docs.python.org/lib/built-in-funcs.html#l2h-45
says that it's "len(s)" instead (but "len(s=[])" doesn't work either)
Looks like a gotcha to me - its the difference between a keyword
(master = 42) and an assignment (s='I am a string')
You just can't do that - how is the parser supposed to know that
the second one is an assignment and not a keyword?
len([]) should work, though.
- Hendrik This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: JimmyT |
last post by:
I just configured and installed 2.3.4 and noticed there is no datetime
module. I noticed there is a datetimemodule.c file that did not get
built (ie no object file). Is there something I need to do to my
system to make this module?
Thanks,
Jim
|
by: Alex Elbert |
last post by:
Hi
I have built dynamic HTMLTable. Now I want to attach it directly to the Email Body - it is already built, so why not to use a ready table. However, I cannot find the way of getting plain HTML text out of dynamically built control. I tried to put my table between div and read div.innerHTML then - HTTP exception has been thrown. Any thoughts, ladies and gentelmen
|
by: Andrew Crook |
last post by:
does MYSQL have a quota built into it! I need it limit the size of each
database
AndiC
|
by: Mark |
last post by:
Is there a way to execute a statement that is built
dynamically by a .NET application.
For example I have a loop that is reading values from a
database and I want to do something like the following.
Dim stringa as string = "response.write somavalue"
Execute(stringa)
I realize this is not the best way to do this but it is
|
by: Yasutaka Ito |
last post by:
Hi,
Is there a way to determine which version of .NET Framework any given
assembly is built with?
thanks!
-Yasutaka
| |
by: William |
last post by:
Looking for a pre built dotnet corporate or small business website template.
|
by: William |
last post by:
Looking for a pre built dot net website for consulting business.
I am trying to put up a quick business web for a dot net frame work. I have
a provider already. I am trying to save time.
Any ideas will be appreciated.
I will look at anything that can be modified VS 2003.
|
by: Daniel |
last post by:
is there any way to get to a unique build verion of an assembly at runtime?
e.g. a version that is unique to the time that the assembly was built?
|
by: meyer |
last post by:
Hi everyone,
which compiler will Python 2.5 on Windows (Intel) be built with? I
notice that Python 2.4 apparently has been built with the VS2003
toolkit compiler, and I read a post from Scott David Daniels where
he said that probably the VS2003 toolkit will be used for Python 2.5
again. However, even before the release of Python 2.5, I cannot seem to
find many retailers around here that still carry Visual Studio 2003,
and some were a...
|
by: drewj840 |
last post by:
I built a Windows service that sweeps a set of folders every 60 seconds and puts the files into a SQL Server database. I am creating a second service that will delete this set of folders and recreate them each night based on a list of active customers. I need to be able to stop the first service before starting the second service and then when the second service completes restart the first service. I haven't the slightest idea how to proceed.
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
| |
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
| |
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
|
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |