[Tutor] How can a function know where it was called from
Kent Johnson
kent37 at tds.net
Thu Mar 2 14:20:12 CET 2006
Noufal Ibrahim wrote:
> On Thu, March 2, 2006 3:55 pm, Ben Vinger wrote:
>
>>Hello
>>
>>I want myfunction in the pseudocode below return something different if it
>>was called from indexfunction.
>
>
> I'm new to this but maybe it would be good if you passed the appropriate
> "version" of "myfunction" to indexfunction from where the original
> decision of which one to use was made rather than doing it at the lower
> levels.
>
> Something like.
>
> def myfunwithheaders(x):
> return header + x + footer
>
> def myfunwithoutheaders(x):
> return x
>
> def main():
> blah
> if needheaders:
> myfunction(myfunwithheaders)
> else:
> myfunction(myfunwithoutheaders)
>
> def myfunction(ret):
> x = "whatever"
> return ret(x)
>
> I'd appreciate if some of the more experienced folks on the list comment
> on the general approach.
This seems needlessly complicated in this case. I would just give
myfunction() a default parameter:
def myfunction(includeHeader=False):
x = 'whatever'
if not includeHeader:
return x
else:
return <header> + x + <footer>
Alternately you could have two versions of myfunction, one that includes
the header/footer and one that does not. The one that does include the
header could call the other one to generate 'x', if that is complex.
I would only consider inspecting the stack in an extreme situation,
maybe if I was modifying myfunction but had no control over the calling
code. But this solution smells badly - it is complex, fragile (will
break if the name of the calling function changes) and obscure (there is
no clue at the point of call that the behaviour is going to be different).
Anyway if you must, take a look at this recipe:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66062
Kent
More information about the Tutor
mailing list