Перевод с Perl на Python - PullRequest
       5

Перевод с Perl на Python

2 голосов
/ 14 ноября 2011

Привет, я работаю над преобразованием 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 ]

3 голосов
/ 14 ноября 2011

Единственное, что сбивает с толку, это то, что таблица страниц - это хеш хешей.$ page_table {$ v} содержит хэш-ссылку на хеш, который содержит ключ 'page', значение которого является целым числом.Циклы сдвига битов, которые целочисленные, но не очень понятный код perl.Проще было бы:

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

Теперь перевод на python должен быть очевиден:

for v in ram:
    page_table[v][page] >>= 1
0 голосов
/ 14 ноября 2011

Гав! Не удивительно, что вы хотите попробовать Python!

Да, Python может сделать это, потому что словари Python (то, что вы бы назвали хешами в Perl) могут содержать другие массивы или словари без ссылок на них.

Однако я весьма предлагаю вам взглянуть на переход к объектно-ориентированному программированию. Посмотрев на ваше заявление о назначении, мне пришлось немного полежать. Я не могу представить, что пытаюсь поддерживать и писать такую ​​программу целиком.

Всякий раз, когда вам нужно сделать хеш, который содержит массив, или массив массивов, или хэш, вы должны использовать объектно-ориентированный код. Объектно-ориентированный код может помешать вам совершать всевозможные ошибки, которые происходят при выполнении подобных действий. И это может сделать ваш код намного более читабельным - даже код Perl.

Взгляните на Python Tutorial и взгляните на Perl Object Oriented Tutorial и узнайте немного об объектно-ориентированном программировании.

Это особенно верно в Python, который был написан с нуля, чтобы быть объектно-ориентированным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...