a = add(multi(3));
a = a + mod(div(a + 3)) + sub(12)
How (and why) should this functions (add, multi, mod, div, sub) be sorted? I am thinking like this ->
1. multi (a = a) (first function)
2. mod (a + mod) (second function)
3. sub (a + mod + sub)
4. ?
5. ?
Not clear what you ask.
What do you mean by "sorting"?
Are these functions from
operator module?
Which function is the first to run? These functions should just be sorted (by me in general, not the program) in a list in the way they are executed(?).
Example:
multi
mod
sub
div
add
Read
evaluation order and
operator precedence
Quote:Python evaluates expressions from left to right. Notice that while evaluating an assignment, the right-hand side is evaluated before the left-hand side.
So in your example:
- it will first evaluate
3
, resulting in 3
- then it will evaluate
multi(3)
- this will throw error if multi
expects 2 arguments, see below
- then it will evaluate
add(result from multi(3))
- then it will assign the result from item 3 to
a
- then, on next line, it evaluate
a
- first term on the right-hand side.
- then it will evaluate a+3
- then it will evaluate
div(result from a + 3)
- then it will evaluate mod(result from div(result from a + 3))
- then it evaluate 12
- then it will evaluate sub(12)
- then it will evaluate
a + result from mod(result from div(result from a + 3)) = result from sub(12)
- then will assign the result to
a
You did not confirm but, I would assume these are functions from
operator module, although there is no
multi
, but
mul
.
So, first of all, your example is invalid, because all these functions expect 2 arguments. e.g. mul(3) will throw error
>>> from operator import mul
>>> mul(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: mul expected 2 arguments, got 1
(Jun-12-2020, 08:16 AM)buran Wrote: [ -> ]Read evaluation order and operator precedence
Quote:Python evaluates expressions from left to right. Notice that while evaluating an assignment, the right-hand side is evaluated before the left-hand side.
So in your example:
- it will first evaluate
(3)
, resulting in 3
- then it will evaluate
multi(3)
- this will throw error if multi
expects 2 arguments, see below
- then it will evaluate
add(result from multi(3))
- then it will assign the result from item 3 to
a
- then, on next line, it evaluate
a
- first term on the right-hand side.
- then it will evaluate a+3
- then it will evaluate
div(result from a + 3)
- then it will evaluate mod(result from div(result from a + 3))
- then it evaluate 12
- then it will evaluate sub(12)
- then it will evaluate
a + result from mod(result from div(result from a + 3)) = result from sub(12)
- then will assign the result to
a
You did not confirm but, I would assume these are functions from operator module, although there is no multi
, but mul
.
So, first of all, your example is invalid, because all these functions expect 2 arguments. e.g. mul(3) will throw error
>>> from operator import mul
>>> mul(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: mul expected 2 arguments, got 1
Thanks. Yes, will read about evaluation order and operator precedence.