Почему было принято решение обрабатывать числовые значения широты и долготы наблюдателей как радианы, а строковые значения — как десятичные градусы?
При работе со значениями широты и долготы в Python я обычно имею дело с объектами с плавающей запятой. Если звезды выровнены правильно, там может быть объект int или два, но в основном плавающие. Я всегда наивно пишу такой код:
lat = 0.0
lon = 0.0
observer = ephem.Observer()
observer.lat = lat
observer.lon = lon
# etc... etc...
И тут я обжигаюсь. Я обжигаюсь, потому что мои значения широты и долготы указаны в десятичных градусах, а не в радианах. Обычно это плохо, потому что я в конечном итоге чешу голову, задаваясь вопросом, что я сделал неправильно. В итоге я перевожу в радианы. Теперь теоретически я мог бы сделать это, чтобы получить правильный результат:
observer = ephem.Observer()
observer.lat = str(lat)
observer.lon = str(lon)
Но это тоже кажется шатким, я думал, что мои значения должны быть в радианах! О, подождите, только если это поплавок. Я понимаю, что принимать строковые или плавающие объекты приятно, но принятие различных числовых типов на основе типов python кажется непоследовательным. Я ожидаю, что оба назначения будут принимать одни и те же числовые типы, например:
lat = lon = 0.55
observer.lat = lat # float lat is assumed to be in radians
observer.lon = lon # float lon is assumed to be in radians
lat = lon = '0.55'
observer.lat = lat # string lat is assumed to be in radians
observer.lon = lon # string lon is assumed to be in radians
Затем могут быть предоставлены операторы преобразования для десятичных градусов/дмс:
lat = '25.0'
lon = 25.0
observer.lat = ephem.to_rad(lat)
observer.lon = ephem.to_rad(lon)
Затем функция to_rad будет явно предполагать, что десятичные градусы предоставляются либо в виде объекта с плавающей запятой, либо в виде строки. На этом этапе интерфейсы будут согласованы. Я очень кратко просмотрел _libastro.c и изучил функцию to_angle, которая лежит в основе этого вопроса.
Я не могу придумать вескую причину, чтобы не реализовать это. На самом деле, я добровольно сделаю это! Но прежде чем я приступлю к этому, я знаю, что я не эксперт по libastro / pyephem, поэтому я хотел открыть этот вопрос, чтобы убедиться, что это имеет смысл. Вполне возможно, что это было сделано по очень веской причине, и я просто безнадежно запутался.
Если бы опытные пользователи или кто-то, знакомый с ядром программного обеспечения, могли бы прокомментировать, я был бы очень признателен.
Заранее спасибо!