gpt4 book ai didi

python - 为什么打印返回的元组与按索引打印元组成员不同?

转载 作者:太空宇宙 更新时间:2023-11-04 09:19:08 24 4
gpt4 key购买 nike

我有这个函数(见下文)接受一些值并返回一个元组。如果我使用索引打印元组的值(例如元组 [0]、元组 [1] 等),则打印的值是正确的。但是,如果我只是打印元组或函数,那么我会得到一些疯狂的值(有时)。

代码如下:

import math

def getvector(x1,y1,length,angle):

x1 = float(x1)
y1 = float(y1)
length = float(length)
angle = float(angle)

x2 = x1 + (length * math.cos(math.radians(angle)))
y2 = y1 + (length * math.sin(math.radians(angle)))

print "in getvector x2,y2 = (%f, %f)" % (x2,y2)

return (x2,y2)


xy2 = getvector(0,0,4,270)
print "in main x2,y2 = (%f, %f)" % (xy2[0],xy2[1])
print getvector(0,0,4,270)
print "tuple =", xy2

结果:

in getvector x2,y2 = (-0.000000, -4.000000)in main x2,y2 = (-0.000000, -4.000000)in getvector x2,y2 = (-0.000000, -4.000000)(-7.3478807948841188e-16, -4.0)tuple = (-7.3478807948841188e-16, -4.0)

知道发生了什么吗?为什么我直接打印元组时值不同?

最佳答案

这就是发生的事情:

当单独打印值时,您使用格式字符串 (%f) 打印它们,它以浮点格式打印数字(即最多约 7 位有效数字)。这部分是正确的。

将值打印为元组的一部分时,元组本身负责生成自己的字符串表示形式。当它创建您的值的字符串表示时,它不使用 %f 格式字符串;相反,它只是在对象上调用 repr()。这不会导致格式化,只会获取数字的精确值,精确到小数点后 14 位。比较:

import math
>>> print "%f" % (0.0 + 4*math.cos(math.radians(270)))
-0.000000
>>> print repr(0.0 + 4*math.cos(math.radians(270)))
-7.3478807948841188e-16

关于python - 为什么打印返回的元组与按索引打印元组成员不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4989069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com