On Nov 23, 11:19 am, astral orange <457r0...@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...? -- http://mail.python.org/mailman/listinfo/python-list