Python Forum

Full Version: Sort methods
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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:
  1. it will first evaluate 3, resulting in 3
  2. then it will evaluate multi(3) - this will throw error if multi expects 2 arguments, see below
  3. then it will evaluate add(result from multi(3))
  4. then it will assign the result from item 3 to a
  5. then, on next line, it evaluate a - first term on the right-hand side.
  6. then it will evaluate a+3
  7. then it will evaluate div(result from a + 3)
  8. then it will evaluate mod(result from div(result from a + 3))
  9. then it evaluate 12
  10. then it will evaluate sub(12)
  11. then it will evaluate a + result from mod(result from div(result from a + 3)) = result from sub(12)
  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:
  1. it will first evaluate (3), resulting in 3
  2. then it will evaluate multi(3) - this will throw error if multi expects 2 arguments, see below
  3. then it will evaluate add(result from multi(3))
  4. then it will assign the result from item 3 to a
  5. then, on next line, it evaluate a - first term on the right-hand side.
  6. then it will evaluate a+3
  7. then it will evaluate div(result from a + 3)
  8. then it will evaluate mod(result from div(result from a + 3))
  9. then it evaluate 12
  10. then it will evaluate sub(12)
  11. then it will evaluate a + result from mod(result from div(result from a + 3)) = result from sub(12)
  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.
Code execution is from left to right from top to down.
If the left or right operand is a function-call, then this is evaluated first.

The operator precedence is what you want to know: https://docs.python.org/3/reference/expr...precedence