On 10/06/17 00:18, Terry Reedy wrote:
On 6/9/2017 6:00 PM, Erik wrote:
On 09/06/17 19:39, sondes kalboussi wrote:
Am a bit confused I was thinking that the order of execution of
functions in a code is from the first to the last function but
sometimes it is the opposite, for instance, some parameters or
outputs from the second function are called in the first one even
thou they are not global, any hints ?
As a complete and utter guess, I assume you are talking about
something like:
result = func1(1, 2, func2(x, y))
On the right side of '=', Python evaluates expressions, to the extent
possible, left to right. The result of each evaluation is an object. In
the above, the order is func1, 1, 2, func2, x, y, _tem = func2(x, y),
func1(1, 2, _tem). Note that function expressions can be more
complicated than just a name, as in func_array[selector].
Terry, how does this help the OP who is obviously a learner, understand
their problem?
In this case, func2() will be called before func1(). This is because
func1() needs three parameters and one of those parameters is the
return value of func2().
Given r = f[a](1, g[b](c)), your rule above does not determine whether
f[a] or g[b] is determined first. In at least some C implementations,
g[b] would be. Since the call g[b](c) could affect the bindings of f,
a, and the result of f[a], the rule that f[a] is calculated before g, b,
c, g[b], and g[b](c) may make a real difference.
Terry, how does this help the OP who is obviously a learner, understand
their problem?
Python can not know the return value of func2() without calling it.
Therefore, to be able to call func1() and give it its three
parameters, it must first call func2() to find out what that third
parameter value is.
It's equivalent to:
func2result = func2(x, y)
result = func1(1, 2, func2result)
Since the func2 call could have the side effect of rebinding 'func1',
this is not exactly equivalent.
Whilst this is strictly correct, Terry, how does this help the OP who is
obviously a learner, understand their problem?
I was trying to help someone by writing in terms I thought would help
them to understand the question they posed (if I was correct in my
assumption of what that question actually meant).
Why have you just jumped on everything I've said with responses that are
really not what someone posting to -list for the first time might even
understand?
If you want to prove something to me, then send something to me. I
really don't understand why you would respond in this way.
E.
--
https://mail.python.org/mailman/listinfo/python-list