On Mon, 24 Mar 2008 04:21:29 -0700, Julien wrote: > Hello all, > > I would like to do something like: > > def called(arg) > if arg==True: > !!magic!!caller.return 1
Instead of writing "if arg==True", or "if (arg==True)==True", or even "if ((arg==True)==True)==True", you should just write: "if arg:" That's probably all you need. > > def caller(arg) > called(arg) > return 2 def called(arg): return 1 def caller(arg): if arg: return called(arg) return 2 And if you wish to change the place where the decision is made: def called(arg): if arg: return 1 else: return 2 def caller(arg): return called(arg) > Here, the fake !!!magic!!! represents a statement (which I ignore) that > would make the caller function return a value different from what it'd > return normally. The statement you use to return a value different from what you would normally return is the "return" statement. You need to call that statement from the function doing the returning, not from another function. > The reason I want that is because I don't want the caller function to > know what's going on in the called function, and be shortcut if the > called function think it's necessary. Not knowing what's going on in called functions is why functions were invented in the first place. That's what they do. What shortcut do you think you might want to take? There are probably better solutions than playing around with the internals of the interpreter. I have a feeling you are trying to implement some sort of function cache, maybe... def check_in_cache(arg): # fake cache code if arg: !!magic!!caller.return 1 # not real Python def function(arg): check_in_cache(arg) # magic happens here # but if it doesn't, we do lots of calculations here return 2 # and finally return Is that the sort of thing you're trying for? If so, that's not the way to go about it. -- Steven -- http://mail.python.org/mailman/listinfo/python-list