【问题标题】:Perl to Python hash table TranslationPerl 到 Python 哈希表的翻译
【发布时间】:2011-11-13 21:20:11
【问题描述】:

您好,我正在将 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;}

【问题讨论】:

    标签: python perl translation


    【解决方案1】:

    唯一令人困惑的是页表是散列的散列。 $page_table{$v} 包含一个哈希引用,哈希包含一个值为整数的键“page”。循环位移该整数,但不是很清楚的 perl 代码。更简单的是:

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

    现在对python的翻译应该很明显了:

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

    【讨论】:

    • 非常感谢,是的,哈希的哈希值令人困惑,感谢您的澄清
    • $page_table{$_}{page} &gt;&gt;= 1 for @ram 更简单,虽然翻译起来不太明显
    • 埃里克,你是对的。如果它只是 Perl,那么不需要添加另一个变量 $v。
    【解决方案2】:

    哇!难怪你想试试 Python!

    是的,Python 可以做到这一点,因为 Python 字典(在 Perl 中称为哈希)可以包含其他数组或字典,而无需对其进行引用。

    但是,我强烈建议您考虑转向面向对象编程。看了你那份作业说明,我不得不躺了一会儿。我无法想象要像这样维护和编写整个程序。

    当你必须做一个包含数组、数组数组或散列散列的散列时,你应该考虑使用面向对象的代码。面向对象的代码可以防止您在执行此类操作时发生各种错误。而且,它可以使您的代码更具可读性——甚至是 Perl 代码。

    看看Python Tutorial,看看Perl Object Oriented Tutorial,学习一点面向对象编程的知识。

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

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 2016-01-04
      • 2010-10-19
      • 1970-01-01
      • 2014-02-22
      • 2011-06-10
      • 2012-04-26
      相关资源
      最近更新 更多