在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是指参数的real
和imag
字段,它们应该是整数,而不是复数。进行这种转换的幕后情况是什么,即使看起来不太可能这样做?
答案 0 :(得分:8)
在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
答案 1 :(得分:0)
正如 Tim Peters 所说的int和float工具repeat.for
和.real
您可以使用以下方式进行验证:
.imag