Я новичок в perl, в большинстве мест, где используется хеш, дается ссылка на словари python. Различие, которое я заметил, состоит в том, что хеши не сохраняют порядок элементов. Я хотел бы знать, существуют ли какие-то более конкретные и фундаментальные различия между ними.
Разница между хешем perl и python
Ответ 1
Основное различие заключается в том, что хеш-коды perl не выдают ошибок, если вы обращаетесь к элементам, которых там нет.
$ python -c 'd = {}; print("Present" if d["a"] else "Missing")'
Traceback (most recent call last):
File "<string>", line 1, in <module>
KeyError: 'a'
$ perl -we 'use strict; my $d = {}; print $d->{"a"} ? "Present\n": "Missing\n"'
Missing
$
Perl хэши автоматически создает элементы, в отличие от python
$ python -c 'd = dict(); d["a"]["b"]["c"]=1'
Traceback (most recent call last):
File "<string>", line 1, in <module>
KeyError: 'a'
$ perl -we 'use strict; my $d = {}; $d->{a}{b}{c}=1'
$
Если вы конвертируете perl
в python
, это основные вещи, которые вас поймут.
Ответ 2
Другим существенным отличием является то, что в Python вы можете иметь (определяемые пользователем) объекты в качестве ключей словаря. Словари будут использовать методы __hash__
и __eq__
объектов для управления этим.
В Perl вы не можете использовать объекты как хеш-ключи по умолчанию. Ключи хранятся в виде строк, а объекты будут интерполированы в строки, если вы попытаетесь использовать их в качестве ключей. (Тем не менее, можно использовать объекты в качестве ключей, используя связанный хеш с модулем, например Tie:: RefHash.)