"Dinu Gherman" <dinu at reportlab.com> wrote in message news:3ad5904d.176672030 at news.t-online.de... > Hi, > > I noticed a very strange behaviour: I've got a recursive function like > this: > > foo(spam, eggs=[]): > ... > return foo(spam, eggs=eggs > > where the default argument for eggs, the empty list, is *empty* for > the top-level call only when it is explicitly provided with the func- > tion call like this: > > bar = foo(mySpam, eggs=[]) > > I've attached a more lengthy example showing, I hope, rather pre- > cisely what I mean. > > Is this a bug or just a lack of understanding of recursion and name > spaces, delicate as they are, in my brain?? > I found no attachment. However, you should be aware that the default value is bound to "eggs" at the time of function declaration. Furthermore, it is mutable. If you modify eggs inside the function (as I presume you do before your recursive call) you will see that modified value as the default the next time you make a top-level call. If, however, you provide an explicit value for eggs at the top level, the default value will not be used. Do you ever make a call to foo without explicitly providing a value for eggs? If not there would seem little point in defining a default value. Does this help? regards Steve
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4