10

我是 perl 的新手,在大多数使用 hash 的地方都会给出对 python 字典的引用。我注意到的一个区别是哈希不保留元素的顺序。我想知道两者之间是否存在一些更具体和根本的区别。

4

2 回答 2

20

最根本的区别是,如果您访问不存在的元素,perl 哈希不会引发错误。

$ python -c 'd = {}; print("Truthy" if d["a"] else "Falsy")'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
KeyError: 'a'
$ perl -we 'use strict; my $d = {}; print $d->{"a"} ? "Truthy\n": "Falsy\n"'
Falsy
$ 

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'
$

如果您正在转换perlpython那些,那么主要的事情会吸引您。

于 2012-05-20T19:30:48.037 回答
9

另一个主要区别是,在 Python 中,您可以将(用户定义的)对象作为字典键。字典将使用对象__hash____eq__方法来管理它。

在 Perl 中,默认情况下您不能将对象用作哈希键。键存储为字符串,如果您尝试将它们用作键,对象将被插入到字符串中。(但是,可以通过将绑定哈希与诸如Tie::RefHash 之类的模块一起使用来将对象用作键。)

于 2012-05-21T01:12:36.070 回答