在 Python 中试验 complex 类型时(特别是版本 3.6.2,如果有任何变化),我做了这个例子:
import math
def distance(x1, y1, x2, y2):
return math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
def cdistance(z1, z2):
return distance(z1.real, z1.imag, z2.real, z2.imag)
print('Points:', distance(0, 0, 1, 1))
print('Complex:', cdistance(0, 1+1j)) # <-- Weird Behaivour
正如人类所期望的那样,它输出:
Points: 1.4142135623730951
Complex: 1.4142135623730951
但是对于计算机来说,Python 将标记行上的 0 视为复数,尽管它是作为整数传递的,这很奇怪。
我的问题是为什么在标记行上传递给cdistance函数的0会自动转换为complex类型在函数中使用,即使 cdistance 函数引用了参数的 real 和 imag 字段,这应该是一个整数,而不是一个复数。执行此转换的幕后发生了什么,即使看起来不太可能这样做?
请您参考如下方法:
在 Python 3 中,根本没有发生任何转换:int 和 float 类型实现了 .real 和 .imag 直接属性:
>>> zero = 0
>>> zero.real
0
>>> zero.imag
0
>>> fzero = 0.0
>>> fzero.real
0.0
>>> fzero.imag
0.0
