почему печать возвращенного кортежа отличается от печати членов кортежа по индексу? - PullRequest
1 голос
/ 14 февраля 2011

У меня есть эта функция (см. Ниже), которая принимает несколько значений и возвращает кортеж. Если я печатаю значения кортежа, используя для этого индексы (например, tuple [0], tuple [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)

Есть идеи, что происходит ?? Почему значения отличаются, когда я печатаю кортеж напрямую?

Ответы [ 2 ]

3 голосов
/ 14 февраля 2011

Итак, вот что происходит:

При индивидуальной печати значений вы печатаете их, используя строку формата (% 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
2 голосов
/ 14 февраля 2011

Печать со спецификацией формата %f показывает результаты с 7 значащими цифрами.Печать кортежа сама по себе не является - поэтому вы получаете число -7,3 ... (очень маленькое и близкое к нулю).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...