Я понимаю, что это, должно быть, была неприятная ошибка, чтобы обнаружить. При использовании языка, где вызов метода имеет необязательные круглые скобки, пробел является деликатным вопросом. Учтите следующее:
square(2+2)*2 # square(4)*2 = 16*2 = 32
square (2+2)*2 # square(4*2) = square(8) = 64
Ваш случай сложнее, потому что +3 без пробела на самом деле является унарным оператором. ! ~ и + унарные операторы имеют наивысший приоритет .
Также интересно - унарный оператор имеет более низкий приоритет, чем оператор возведения в степень. Therefor
-4**2 # -(4**2) = -16