Привет, я работаю над преобразованием 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;}
Единственное, что сбивает с толку, это то, что таблица страниц - хэш хешей. $ page_table {$ v} содержит hashref для хэша, который содержит ключевую "страницу", значение которой является целым числом. Цикл-бит сдвигает это целое число, но не является очень четким perl-кодом. Проще было бы:
foreach my $v (@ram) {
$page_table{$v}->{page} >>= 1;
}
Теперь перевод на python должен быть очевиден:
for v in ram:
page_table[v][page] >>= 1
Гав! Неудивительно, что вы хотите попробовать Python!
Да, Python может это сделать, потому что словари Python (то, что вы бы назвали хэшами в Perl) могут содержать другие массивы или словари, не ссылаясь на них.
Тем не менее, я настоятельно рекомендую вам взглянуть на перемещение в объектно-ориентированное программирование. Посмотрев на это выражение о назначении, мне пришлось немного полежать. Я не могу представить, как пытаться поддерживать и писать целую программу.
Всякий раз, когда вам нужно сделать хэш, содержащий массив, массив массивов или хэш хэшей, вы должны изучать использование объектно-ориентированного кода. Объектно-ориентированный код может помешать вам делать всевозможные ошибки, которые происходят, когда вы делаете этот тип материала. И это может сделать ваш код более читаемым - даже код Perl.
Взгляните на Python Tutorial и взгляните на Perl Object Oriented Tutorial и немного узнайте об объектно-ориентированном программировании.
Это особенно верно в Python, который был написан с нуля до объектно-ориентированного.
$page_table{$_}{page} >>= 1 for @ram