Alex Kleider wrote: > On 2015-10-14 12:27, Peter Otten wrote: >> Alex Kleider wrote: >> >>> On 2015-10-13 14:44, Alex Kleider wrote: >>>> On 2015-10-13 12:11, Danny Yoo wrote: >>>> >>>> >>>>> ###################### >>>>> def make_ask(f, l, p): >>>>> d = {'Enter your first name: ' : f, >>>>> 'Enter your last name: ' : l, >>>>> 'Your mobile phone #: ' : p} >>>>> return d.get >>>>> ###################### >>> >>> This is an example of a 'closure' is it not? >> >> It does not make big difference, but I would call the return value >> "bound >> method" rather than "closure". For me closure implies access to the >> local >> namespace of the enclosing function, e. g. >> >> def make_ask(f, l, p): >> d = {'Enter your first name: ' : f, >> 'Enter your last name: ' : l, >> 'Your mobile phone #: ' : p} >> def get(key): >> return d.get(key) >> return get >> >> Here d is looked up when get() is invoked. Let's make a modification to >> demonstrate that the current binding of d is used: >> >>>>> def make_ask(f, l, p): >> ... d = {'Enter your first name: ' : f, >> ... 'Enter your last name: ' : l, >> ... 'Your mobile phone #: ' : p} >> ... def get(key): >> ... return d.get(key) >> ... def set_d(new_d): >> ... nonlocal d >> ... d = new_d >> ... return get, set_d >> ... >>>>> get, set_d = make_ask(*"abc") >>>>> get("Enter your first name: ") >> 'a' >>>>> class WontTell: >> ... def get(self, key): return "won't tell" >> ... >>>>> set_d(WontTell()) >>>>> get("Enter your first name: ") >> "won't tell" > > Thank you, Peter, for your continued efforts to explain. > It is all getting pretty convoluted for my poor brain! > It took a very long time for me to figure out what the > class WontTell was all about.
Sorry about that digression. The example would work with any old dict >>> get, set_d = make_ask("John", "Doe", "123") >>> get("Enter your last name: ") 'Doe' >>> set_d({"foo": "bar"}) >>> get("Enter your last name: ") is None True >>> get("foo") 'bar' but that way the effect of rebinding d (which is what happens) is the same as replacing the data in the dict initially bound to d. > I probably should follow Danny Yoo's advice and not concern > myself with this but my curiosity is roused. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor