【问题标题】:Two versions of python giving two different results for the same code两个版本的 python 为相同的代码给出两个不同的结果
【发布时间】:2022-01-22 16:17:54
【问题描述】:

如果使用 Python2 或 Python3 运行,以下代码会产生两种不同的结果。为什么?

from skyfield.api import wgs84, load

latitude =  -35
longitude =  150
altitude =  100
year = 2022
month = 1
day = 21
hour = 14
minute = 6
seconds = 43.941372

ts = load.timescale()
t_meas = ts.utc(year,month,day,hour,minute,seconds)

radar = wgs84.latlon(latitude, longitude, altitude)
radar_ECI = radar.at(t_meas)
print(radar_ECI.position.m)

使用 Skyfield 1.41 输出 [-2804378.01051857 4419981.90545062 -3632070.86144542]

天空场 1.40 的输出 [-2804356.81834716 4419995.31425895 -3632070.90655877]

【问题讨论】:

  • 嗯,简短的回答是 Python 3 不向后兼容 Python 2,并且没有声称是。更具体地说,Skyfield 中可能存在一个错误,无法正确解释这些差异。(而且 Python 2 多年来一直没有得到官方支持。)你得到了什么输出?
  • 你在两个 Python 环境中都有相同版本的 skyfield 吗?
  • 我发现,其实天域的两个版本并不相同。 1.40 版安装在 Python2 上,1.41 版安装在 Python3 上。一旦我升级到 1.41,问题就解决了。
  • @Jonathan 太棒了!你能把它作为答案发布吗?你甚至可以自己接受。

标签: python python-3.x python-2.x skyfield


【解决方案1】:

Skyfield 的两个版本并不相同。 1.40 版安装在 Python2 上,1.41 版安装在 Python3 上。一旦我升级到 1.41,问题就解决了。但是,Skyfield 的更改日志中似乎没有任何内容可以解释为什么它会在这两个版本之间产生不同的结果。

【讨论】:

  • 它可以像使用from __future__ import division之类的新版本一样简单。
【解决方案2】:

我建议更新您的问题以显示您获得的两个输出。没有它们,读者无法判断您是在询问输出差异很大还是很小。

一个可能的答案(但没有看到输出,我不知道它们之间的差异是否有合理的大小来匹配这个解释):大多数 Skyfield 版本——理想情况下,所有 Skyfield 版本,但有时我忘记了——携带从 IERS 下载最新和最新的 ∆T 表。他们不断地预测,然后测量地球的方向。在 Skyfield 1.40 和 1.41 之间,表格已更新,这可能意味着对过去几个月地球指向的估计略有不同。通常,它意味着东西方向的差异,但在南北方向的返回位置上没有差异。

【讨论】:

  • 对于我所看到的情况,这是一个非常合理的解释,因为差异非常小。
【解决方案3】:

毫无疑问,Python 2 和 3 的编码方式有很多差异,应该加以考虑。但是如果你想使用 Python 3 和 Python 2 编码,你可以使用这个 future 内置库。 给的金额可能不同

syntax : from __future__ import ..

您可以在官方 Python 文档中了解它:

https://docs.python.org/3/howto/pyporting.html#the-short-explanation

也许这篇文章也会对您有所帮助,以便更好地理解差异:

https://cv-tricks.com/how-to/developer-guide-to-key-differences-between-python-2-and-3/#:~:text=Python%203%20uses%20unicode%20strings,using%20the%20bytes()%20function.&text=Python%202%20provides%20useful%20functional,default%20in%20the%20global%20namespace.

【讨论】:

  • 虽然这通常是有用的信息,但似乎这里的区别不在于提问者的代码,而在于他们正在使用的库(甚至可能是不同版本的库)。
  • 我写这个信息只是为了更好地理解和更多信息,如果提问者被告知这个库在两个版本的 Python 中的性能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多