10

私はperlを初めて使用します。ハッシュが使用されるほとんどの場所で、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'
$

あなたがそれらに変換perlしている場合pythonは、あなたを捕まえる主なものです.

于 2012-05-20T19:30:48.037 に答える
9

もう 1 つの大きな違いは、Python では (ユーザー定義の) オブジェクトを辞書のキーとして使用できることです。辞書は、オブジェクト__hash____eq__メソッドを使用してこれを管理します。

Perl では、デフォルトではオブジェクトをハッシュ キーとして使用できません。キーは文字列として保存され、オブジェクトをキーとして使用しようとすると、オブジェクトは文字列に補間されます。(ただし、 Tie::RefHashなどのモジュールで tie されたハッシュを使用することにより、オブジェクトをキーとして使用することは可能です。)

于 2012-05-21T01:12:36.070 に答える