2011-11-13 49 views
1

您好我正在轉換perl到python的東西做。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;} 

回答

3

唯一令人困惑的是頁表是散列的散列。 $ page_table {$ v}包含一個哈希值,該哈希值包含一個鍵值爲「整數」的「頁面」。循環移位該整數,但不是非常清晰的Perl代碼。更簡單的是:

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

現在翻譯蟒蛇應該是顯而易見的:

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

非常感謝哈希哈希混亂,我讚賞澄清 – sylverfyst

+1

甚至更​​簡單,雖然不太明顯的翻譯是'$ page_table {$ _} {page} >> = 1 for @ ram' –

+0

Eric,you對了。如果它只是Perl,那麼不需要添加另一個變量$ v。 –

-2

汪!難怪你想嘗試Python!

是的,Python可以做到這一點,因爲Python字典(你可以稱之爲Perl中的哈希)可以包含其他數組或字典,而不需要引用它們。

但是,我高度建議你看看進入面向對象編程。在看完你的任務陳述後,我不得不躺下一點。我無法想象試圖維護和編寫這樣的整個程序。

無論何時您必須執行包含數組或散列哈希的散列,您都應該使用面向對象的代碼進行研究。面向對象的代碼可以防止你做出那種類型的東西時發生的各種錯誤。而且,它可以使你的代碼更加可讀 - 甚至是Perl代碼。

看看Python Tutorial,看看Perl Object Oriented Tutorial並瞭解一些關於面向對象的編程。

在從頭開始面向對象的Python中,這尤其如此。