为什么整数会自动转换为复数?

时间:2017-09-13 01:43:15

标签: python python-3.x

在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视为复数,尽管它是作为整数传递的。

我的问题是为什么传递给标记行上的0函数的cdistance会自动转换为complex类型,以便在函数中使用,即使cdistance function是指参数的realimag字段,它们应该是整数,而不是复数。进行这种转换的幕后情况是什么,即使看起来不太可能这样做?

2 个答案:

答案 0 :(得分:8)

在Python 3中,根本没有转换:intfloat类型直接实现.real.imag属性:

>>> zero = 0
>>> zero.real
0
>>> zero.imag
0

>>> fzero = 0.0
>>> fzero.real
0.0
>>> fzero.imag
0.0

答案 1 :(得分:0)

正如 Tim Peters 所说的int和float工具repeat.for.real

您可以使用以下方式进行验证:

.imag