Steven, On Thu, Jun 2, 2016 at 1:20 AM, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote: > On Thursday 02 June 2016 14:21, Igor Korot wrote: > >> Hi, guys, >> >> On Wed, Jun 1, 2016 at 9:42 PM, boB Stepp <robertvst...@gmail.com> wrote: >>> On Wed, Jun 1, 2016 at 7:55 PM, Marcin Rak <m...@sightlineinnovation.com> >>> wrote: >>>> Hi to all >>>> >>>> I have a beginner question to which I have not found an answer I was able >>>> to understand. Could someone explain why the following program: >>>> >>>> def f(a, L=[]): >>>> L.append(a) >>>> return L >>>> >>>> print(f(1)) >>>> print(f(2)) >>>> print(f(3)) >>>> >>>> gives us the following result: >>>> >>>> [1] >>>> [1,2] >>>> [1,2,3] >>>> >>>> How can this be, if we never catch the returned L when we call it, and we >>>> never pass it on back to f??? >> >> I think the OP question here is: >> >> Why it is printing the array? > > Because he calls the function, then prints the return result. > > print(f(1)) > > calls f(1), which returns [1], then prints [1]. > > Then he calls: > > print(f(2)) > > which returns [1, 2] (but he expects [2]), then prints it. And so on. > > >> There is no line like: >> >> t = f(1) >> print t > > Correct. But there are lines: > > print(f(1)) > print(f(2)) > print(f(3))
I think you missed the point. Compare: def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3)) vs. def f(a, L=[]): L.append(a) return L t = f(1) print t t = f(2) print t t = f(3) print t For people that comes from C/C++/Java, the first syntax is kind of weird: you return a value from the function but the caller does not save it anywhere. Especially since the return is not a basic type and most of them are not familiar with scalar vs list context (sorry for the Perl terminology here) Thank you. > > > > -- > Steve > > -- > https://mail.python.org/mailman/listinfo/python-list -- https://mail.python.org/mailman/listinfo/python-list