尝试将旧的 pascal 脚本转换为 python:pascal“记录”的问题

我目前的任务是将旧的 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增加的长度以适应已从文件中提取的lambda和value对的数量(如果我的假设错误,请纠正我!)。但我不明白其余的代码应该做什么,尤其是Reflexion[i-1]:=temp. 是长度为 i-1Reflexion的类型的对象MeasurementPoint吗?或者那部分是什么意思?为什么lambda和value提取为temp.lambda和temp.value? 这是否会自动将它们配对在记录中......?


如果有人可以通过解释这一点来帮助我,我将不胜感激。而且,当然,如果您碰巧知道如何将其转换为 python 3.x,那就更好了 ;-)


幕布斯7119047
浏览 120回答 1
1回答

千巷猫影

Pascal 的record就像 Python 的namedtuple. 一个记录(namedtuple )在函数中被逐个字段读取(因此temp.lambda, temp.value)readLn。Reflexion[i-1]:=temp看起来像一个list记录数组(Python 的)。由于数组具有恒定长度(在初始化时声明;n-1),因此新记录存储在连续的槽中。我希望这能回答您关于 Pascal 代码功能的问题...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python