On Thursday, June 2, 2016 at 6:38:56 AM UTC-7, Igor Korot wrote: > 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
I came from C/C++/Java, and the first syntax makes perfect sense to me. You're just taking the result of a function and directly passing it as a parameter to another. There's nothing confusing about that. C/C++/Java let you do it. -- https://mail.python.org/mailman/listinfo/python-list