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

1

Привет, я работаю над преобразованием 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;}
Теги:
translation

2 ответа

3

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

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

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

for v in ram:
    page_table[v][page] >>= 1
  • 0
    Большое спасибо, да, хеш хешей сбивает с толку, я ценю разъяснения
  • 1
    еще проще, хотя и менее очевидным для перевода является $page_table{$_}{page} >>= 1 for @ram
Показать ещё 1 комментарий
-3

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

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню