我是 perl 的新手,在大多数使用 hash 的地方都会给出对 python 字典的引用。我注意到的一个区别是哈希不保留元素的顺序。我想知道两者之间是否存在一些更具体和根本的区别。
问问题
9183 次
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'
$
如果您正在转换perl
为python
那些,那么主要的事情会吸引您。
于 2012-05-20T19:30:48.037 回答
9
另一个主要区别是,在 Python 中,您可以将(用户定义的)对象作为字典键。字典将使用对象__hash__
和__eq__
方法来管理它。
在 Perl 中,默认情况下您不能将对象用作哈希键。键存储为字符串,如果您尝试将它们用作键,对象将被插入到字符串中。(但是,可以通过将绑定哈希与诸如Tie::RefHash 之类的模块一起使用来将对象用作键。)
于 2012-05-21T01:12:36.070 回答