Skip to main content
 首页 » 编程设计

python之为什么整数会自动转换为复数

2025年05月04日11lyj

在 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