Я написал этот короткий и, надеюсь, довольно объяснительный код, поскольку столкнулся с интересным неожиданным поведением при работе с базовыми c математическими операциями.
from collections import namedtuple
P = namedtuple('P', 'x y')
# euclidean distance with missing parentheses before sqroot
dist = lambda p1, p2:(p1.x-p2.x)**2 + (p1.y-p2.y)**2 ** 0.5
# correct_dist = lambda p1, p2: ((p1.x-p2.x)**2 + (p1.y-p2.y)**2)**0.5
A = P(0, 0)
B = P(1, 1)
AB = dist(A, B)
print(AB, type(AB)) # returns complex?!
print(-1**2 -1**2 **0.5) # -2.0 (as expected since root not applied to the sum)
Кстати, это больше для понимания целей ( не для фактического использования).
Помогите мне лучше понять это, пожалуйста!