Newbie question...

Hans Nowak ivnowa at hvision.nl
Wed Sep 27 10:00:28 EDT 2000


jhorn94 at my-deja.com wrote:

> I'm going thru the Learning Python book and am stumpped.  The exercise
> calls for a function that accepts and arbitrary number of keyword
> arguments, then returns the sum of the values.  I can step thru the
> arguments with a for statement, but I can't figure out how to accumlate
> a sum of the values.  Any help is appreciated.
> 
> def adder(**args):
> 
>     for x in args.keys():
>         y=y+x
>     return y
> 
> print adder(good=1, bad=2, ugly=3)
> print adder(good="a", bad="b", ugly="c")
> 
> Traceback (most recent call last):
>   File "C:\Python16\Pythonwin\pywin\framework\scriptutils.py", line
> 301, in RunScript
>     exec codeObject in __main__.__dict__
>   File "C:\Python16\examples\lpython\sol\CH4EX4.PY", line 8, in ?
>     print adder(good=1, bad=2, ugly=3)
>   File "C:\Python16\examples\lpython\sol\CH4EX4.PY", line 4, in adder
>     y=y+x
> UnboundLocalError: y

y must have an initial value... try inserting  y = 0  before the for.
Aside from that, you probably want to use args.values() rather than
args.keys().

This won't work for your second line (good="a", etc) though, because it
uses strings for values, and y is initialized as an integer.

If you want a more generic function, you could try:

def adder3(**args):
    return reduce(lambda x, y, a=args: x+y, args.values())

>>> print adder3(good=1, bad=2, ugly=3)
6
>>> print adder3(good="a", bad="b", ugly="c")
"abc"


-- Hans Nowak

-----BEGIN PYTHON CODE BLOCK-----
Version: 1.0
Py+++ v1.5.2,1.6 ev+,i,p n+++ s++++ tt+++,w+ a1996 w---#
ow95,w98,wnt,d6,d7,l
lc++,cc++,pa+++,sc+,b++# m- b3 fs--- r9
------END PYTHON CODE BLOCK------



More information about the Python-list mailing list