setdefault behaviour question
MRAB
python at mrabarnett.plus.com
Sat May 19 16:01:28 EDT 2012
On 19/05/2012 20:44, pete McEvoy wrote:
> I am confused by some of the dictionary setdefault behaviour, I think
> I am probably missing the obvious here.
>
> def someOtherFunct():
> print "in someOtherFunct"
> return 42
>
> def someFunct():
> myDict = {1: 2}
> if myDict.has_key(1):
> print "myDict has key 1"
> x = myDict.setdefault(1, someOtherFunct()) #<<<<< I didn't
> expect someOtherFunct to get called here
> print "x", x
> y = myDict.setdefault(5, someOtherFunct())
> print "y", y
>
>
> +++++++++++++++++++++
>
> if I call someFunct() I get the following output
>
> myDict has key 1
> in someOtherFunct
> x 2
> in someOtherFunct
> y 42
>
>
> For the second use of setdefault I do expect a call as the dictionary
> does not the key. Will the function, someOtherFunct, in setdefault
> always be called anyway and it is just that the dictionary will not be
> updated in any way?
The answer is yes.
someOtherFunct() is called and then 1 and the result of
someOtherFunct() are passed as arguments to myDict.setdefault(...).
More information about the Python-list
mailing list