On Sat, May 19, 2018 at 07:22:28AM +0000, Steven D'Aprano wrote: > On Fri, 18 May 2018 18:31:16 -0700, Mike McClain wrote: > <snip> > I *think* you are describing something like this: Real close! > def foo(x): > return x + 1 > > def bar(arg): > a = baz(arg) # do some magic > result = bar(a) # call the important function result = foo(a) # small change > return buz(result) # and a bit more magic
<snip> > Typically, we wouldn't use the term "decorator" or "decoration" to > describe a hand-written function like bar(), even if it calls foo(). > Normally the "decorator" terminology is reserved for one of two things: > > (1) The software design pattern of using a factory function to "wrap" one > function inside an automatically generated wrapper function that provides > the extra additional functionality: > > > def factory(func): > # Wrap func() to force it to return zero instead of negative > def wrapped(arg): > result = func(arg) > if result < 0: > result = 0 > return result > # return the wrapped function > return wrapped > > > (2) the syntax for applying such a factory function: > > @factory > def myfunction(x): > return 5 - x Too early to tell. Your definition of factory returns a function ref so needs assignment unless used (execd) immediately. Yes, no? def factory(func): # Wrap func() to a different kind of magic def bar(arg): a = baz(arg) # do some magic result = func(a) # small change return buz(result) # and a bit more magic return bar @factory def foo(x): return something_outrageous At this point it looks to me that I've created a nameless function that can't be used. How does the assignment take place? > Does this help? If I've understood you correctly it helps one Heck of a lot. If I haven't, no doubt the fault is mine. I've used several procedural languages but you OOP folk think in strange paths. So far it is a fun trip. > I know these concepts are sometimes tricky. Concrete examples often make > them easier to understand. Feel free to ask more questions as needed. > -- > Steve Walk with Light, Mike -- I am going to go stand outside so if anyone asks about me, tell them I'M OUTSTANDING! -- https://mail.python.org/mailman/listinfo/python-list