Perl到Python哈希表的翻译

时间:2011-11-13 21:20:12

标签: python perl translation

嗨,我正在努力将perl转换为python以进行操作。

我一直在查看perl中的哈希表上的一些代码,我遇到了一行代码,我真的不知道它是如何在python中做的。我知道它将页面的位串转换为1

%page_table = ();           #page table is a hash of hashes
%page_table_entry = (       #page table entry structure
"dirty", 0,                 #0/1 boolean
"referenced", 0,            #0/1 boolean
"valid", 0,                 #0/1 boolean
"frame_no", -1,             #-1 indicates an "x", i.e. the page isn't in ram
"page", 0                   #used for aging algorithm.  8 bit string.);
@ram = ((-1) x $num_frames);

有人可以告诉我如何在python中表示这个吗?我已经完成了哈希表的定义,它们只是作为我正在做的事情的参考。感谢您给我的任何帮助。

for($i=0; $i<@ram; $i++){
    $page_table{$ram[$i]}->{page} = $page_table{$ram[$i]}->{page} >> 1;}

2 个答案:

答案 0 :(得分:3)

唯一令人困惑的是页面表是散列的散列。 $ page_table {$ v}包含散列的hashref,散列包含一个键'page',其值为整数。循环位移整数但不是非常清晰的perl代码。更简单的是:

foreach my $v (@ram) {
    $page_table{$v}->{page} >>= 1;
}

现在对python的翻译应该是显而易见的:

for v in ram:
    page_table[v][page] >>= 1

答案 1 :(得分:-2)

汪!难怪你想尝试Python!

是的,Python可以这样做,因为Python字典(你在Perl中调用哈希)可以包含其他数组或字典,而不会引用它们。

但是,我高度建议您考虑进入面向对象的编程。在查看了你的任务陈述后,我不得不躺下一会儿。我无法想象试图维护和编写这样的整个程序。

每当你必须做一个包含数组,数组数组或散列哈希的哈希时,你应该考虑使用面向对象的代码。面向对象的代码可以防止您在执行此类事务时发生所有类型的错误。而且,它可以使您的代码更具可读性 - 甚至是Perl代码。

查看Python Tutorial并查看Perl Object Oriented Tutorial并了解面向对象编程。

在Python中尤其如此,它是从头开始编写的,是面向对象的。