Beginning Question about Python functions, parameters...
Diez B. Roggisch
deets at nospam.web.de
Mon Nov 23 13:17:12 EST 2009
astral orange 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):
The zip-function takes n iterables, and produces a list with n-tuples out of
it. Type this into the python-prompt:
>>> zip([1, 2, 3], ["a", "b", "c"])
The other thing here is tuple-unpacking. If you know that something has a
specific length, you can unpack it into distinct values like this:
>>> a, b = (10, 20)
>>> print a
10
>>> print b
20
Now
for label, name in zip(labels, names):
does
- create a list of tuples, each tuple having two elements, the first being
the label, the second a name
- loops over this list
- for each item in the list (remember, it's a 2-tuple!), unpack it into
label and name
> 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)
Data here is expected to be a dictionary of dictionaries. The first level of
keys are the labels. The second is the name. It is expected that labels
always exist, but names might be empty, so instead of writing
return data[label][name]
it uses get(name) on a dict which will return the value for the key, or
None:
>>> {"foo" : "bar"}.get("foo")
bar
>>> {"foo" : "bar"}.get("baz")
>>> # no output means None
That being said, I agree with Neo that this introduction seems to be rather
bad.
Diez
More information about the Python-list
mailing list