尝试将旧的 pascal 脚本翻译成 python:pascal 问题 "record"

Trying to translate an old pascal script to python: problems with pascal "record"

我目前的任务是将旧的 Pascal 脚本翻译成 python。问题是,我没有任何使用 pascal 的经验......到现在为止,一切都很顺利(大部分脚本都是不言自明的),但现在我遇到了一小段我无法理解的代码输出:

# some other code here...

type MeasurementPoint = record
                         lambda : double;
                         value : double;
                        end;

# some more code...

procedure foo(MyFileName: string, somemoreargs):
var  somevars: integer; 
     somemorevars: double;
     temp: MeasurementPoint; 

# even more code...

  i:= 0;
  Assign(MyInFile,MyFileName);
  Reset(MyInFile);
  repeat
    Inc(i);
    SetLength(Reflexion, i);
    readln(MyInFile, temp.lambda, temp.value);
    Reflexion[i-1]:=temp;
  until EoF(MyInFile);
  Close(MyInFile);

我只是想不通这部分代码应该做什么... 我非常了解整个文件 MyInFile 正在逐行读取,并且每行包含两个值,即 'lambda''value',它们被提取为双精度值。

根据 pascal wiki,record 是一个容器,能够容纳不同类型的对象并在逻辑上将它们组合在一起(这可以与 python 中的字典相提并论吗?)。如果我理解正确 SetLength ,它用于定义数组的长度,这在这里很有意义。 i 每次读取一行都会增加,因此 temp 的长度会增加以适应已经从文件中提取的 lambdavalue 对的数量(请更正如果我的假设是错误的!)。但我不明白其余代码应该做什么,尤其是 Reflexion[i-1]:=tempReflexion 是长度为 i-1 的 MeasurementPoint 类型的对象吗?或者那部分是什么意思?为什么 lambdavalue 被提取为 temp.lambdatemp.value?这会在记录中自动将它们配对吗...?

如果有人能帮我解释一下,我将不胜感激。当然,如果您碰巧知道如何将其翻译成 python 3.x,那就更好了 ;-)

Pascal 的 record 就像 Python 的 namedtuple。在 readLn 函数中逐字段读取一条记录 (namedtuple)(因此 temp.lambdatemp.value)。

Reflexion[i-1]:=temp 看起来像一个记录数组(Python 的 list)。由于数组具有恒定长度(在初始化时声明;n-1),新记录存储在连续的槽中。

我希望这能回答您有关 Pascal 代码功能的问题...