嗨,我正在努力将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;}
答案 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中尤其如此,它是从头开始编写的,是面向对象的。