Beginning Question about Python functions, parameters...

r rt8396 at gmail.com
Mon Nov 23 22:37:09 EST 2009


On Nov 23, 11:19 am, astral orange <457r0... at gmail.com> wrote:
> Hi, I am trying to teach myself Python and have a good book to help me
> but I am stuck on something and I would like for someone to explain
> the following piece of code for me and what it's actually doing.
> Certain parts are very clear but once it enters the "def store(data,
> full_name): ...." function and the "def lookup()..." function things
> get a little confusing for me. Specifically, lines 103-108 *and* Lines
> 110-111.
>
> Lastly, I am not sure how to print the results I've put into this
> program either, the book I'm reading doesn't tell me. As you can tell,
> I am a beginner and I don't truly understand everything that is going
> on here...a lot, but not all....
>
> Here is the code:
>
>  92 def init(data):
>  93     data['first'] = {}
>  94     data['middle'] = {}
>  95     data['last'] = {}
>  96
>  97 def store(data, full_name):
>  98     names = full_name.split()
> 100     if len(names) == 2: names.insert(1, '')
> 101     labels = 'first', 'middle', 'last'
> 103     for label, name in zip(labels, names):
> 104         people = lookup(data, label, name)
> 105     if people:
> 106         people.append(full_name)
> 107     else:
> 108         data[label][name] = [full_name]
> 109
> 110 def lookup(data, label, name):
> 111     return data[label].get(name)
> 112
> 113
> 114 MyNames = {}
> 115 init(MyNames)
> 116 store(MyNames, 'John Larry Smith')
> 117 lookup(MyNames, 'middle', 'Smith')

This is a horrible example to show noobs. I think the OP could better
understand this as a class EVEN though the OP may or may not know what
a class *is* yet.

>>> class Name():
	def __init__(self, first, middle, last):
		self.first = first
		self.middle = middle
		self.last = last

>>> name1 = Name('Guido', 'van', 'Rossum')
>>> name1.first
'Guido'
>>> name1.middle
'van'
>>> name1.last
'Rossum'
>>> print name1
<__main__.Name instance at 0x029BFD78>


This time we add a __str__ method, the result will speak louder than
words!!

>>> class Name():
	def __init__(self, first, middle, last):
		self.first = first
		self.middle = middle
		self.last = last
	def __str__(self):
		return '%s %s %s' %(self.first, self.middle, self.last)

>>> name2 = Name('Terry', 'J', 'Reedy')
>>> name2.first
'Terry'
>>> name2.middle
'J'
>>> name2.last
'Reedy'
>>> print name2
Terry J Reedy

See the difference in the print statements. Now lets have some real
fun and access each sub name by index haha!


>>> class Name():
	def __init__(self, first, middle, last):
		self.first = first
		self.middle = middle
		self.last = last
	def __str__(self):
		return '%s %s %s' %(self.first, self.middle, self.last)
	def __len__(self):
		return 3
	def __getitem__(self, item):
		if item == 0:
			return self.first
		elif item == 1:
			return self.middle
		elif item == 2:
			return self.last
		else:
			raise IndexError("Index must be in range 0, 2")


>>> name = Name('Joe', 'blow', 'scripter')
>>> name[0]
'Joe'
>>> name[1]
'blow'
>>> name[2]
'scripter'
>>> len(name)
3

WOW, thats more info in a few lines than any tut i ever seen! I wish i
could have seen that in my initial days, could have save some
countless hours of confusion!!! Maybe i am in the wrong line of work?

Should i keep going...?



More information about the Python-list mailing list