reading help() - newbie question

P

Payal

Hi,
I am trying to learn Python (again) and have some basic doubts which I
hope someone in the list can address. (English is not my first language and I
have no CS background except I can write decent shell scripts)

When I type help(something) e.g. help(list), I see many methods like,
__methodname__(). Are these something special? How do I use them and why
put "__" around them?

One more simple query. Many times I see something like this,
| D.iteritems() -> an iterator over the (key, value) items of D
What is this iterator they are talking about and how do I use these
methods because simly saying D.iteritems() does not work?

Thanks a lot in advance.
With warm regards,
-Payal
--
 
G

Gabriel Genellina

When I type help(something) e.g. help(list), I see many methods like,
__methodname__(). Are these something special? How do I use them and why
put "__" around them?

You may want to install and use "see", a human-friendly replacement of
dir()

So instead of this mess:

py> dir(pencil_case)
['__add__', '__class__', '__contains__', '__delattr__',
'__delitem__', '
__delslice__', '__doc__', '__eq__', '__ge__', '__getattribute__',
'__get
item__', '__getslice__', '__gt__', '__hash__', '__iadd__',
'__imul__', '
__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__',
'__ne__
', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__reversed__',
'__rmul__', '__setattr__', '__setitem__', '__setslice__',
'__str__', 'a
ppend', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
'reverse'
, 'sort']

you get this instead:

py> see(pencil_case)
[] in + +=
* *=
< <= == != hash() help() iter() len() repr()
reversed()
str() .append() .count() .extend() .index()
.insert() .pop() .remove() .reverse() .sort()


For us mere mortals, it's a lot more readable.
"see" is available at http://github.com/inky/see
 
L

Lie Ryan

Hi,
I am trying to learn Python (again) and have some basic doubts which I
hope someone in the list can address. (English is not my first language and I
have no CS background except I can write decent shell scripts)

When I type help(something) e.g. help(list), I see many methods like,
__methodname__(). Are these something special? How do I use them and why
put "__" around them?

Yes, the double-underscore are hooks to the various python protocols.
They defines, among all, operator overloading, class construction and
initialization, iterator protocol, descriptor protocol, type-casting, etc.

A typical usage of these double-underscore is to create a class that
overrides these functions, e.g.:

class Comparable(object):
def __init__(self, value):
self.value = value
def __lt__(self, other):
return self.value > other.value
def __gt__(self, other):
return self.value < other.value
def __str__(self):
return "Value: " + self.value

You should never create your own double-underscore method, just
override/use the ones that Python provide.
One more simple query. Many times I see something like this,
| D.iteritems() -> an iterator over the (key, value) items of D
What is this iterator they are talking about and how do I use these
methods because simly saying D.iteritems() does not work?

read about iterator protocol. Basically, the iterator protocol allows
for-looping over a user-defined class (e.g. for emulating a collection).
D.iteritems() returns an iterator object, which for-loop knows how to
iterate over to generate the stream of (key, value) pairs.
 
L

Lie Ryan

Yes, the double-underscore are hooks to the various python protocols.
They defines, among all, operator overloading, class construction and
initialization, iterator protocol, descriptor protocol, type-casting, etc.

A typical usage of these double-underscore is to create a class that
overrides these functions, e.g.:

class Comparable(object):
def __init__(self, value):
self.value = value
def __lt__(self, other):
return self.value > other.value
def __gt__(self, other):
return self.value < other.value
def __str__(self):
return "Value: " + self.value

You should never create your own double-underscore method, just
override/use the ones that Python provide.

Ok, I just read what I wrote again and I noticed that the example isn't
complete enough to illustrate what I'm talking about, so:

class Comparable(object):
def __init__(self, value):
self.value = value
def __lt__(self, other):
return self.value > other.value
def __gt__(self, other):
return self.value < other.value
def __str__(self):
return "Value: " + self.value

a = Comparable(10) # a.value = 10
b = Comparable(20) # b.value = 20

# the < operator calls __lt__ special method and this
# prints False, because a.value > other.value is False
print a < b

# prints "Value: 10" since 'print' statement calls str() builtin
# function which calls __str__ to turn objects into a string
print a
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top