Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python関数はなぜ、どのようにハッシュ可能ですか?


オブジェクトがその存続期間中同じままであるハッシュ値を持っている場合、そのオブジェクトはハッシュ可能であると言われます。 __hash __()メソッドがあり、他のオブジェクトと比較できます。このためには、__ eq __()または__cmp __()メソッドが必要です。比較したときにハッシュ可能なオブジェクトが等しい場合、それらは同じハッシュ値を持ちます。

これらのデータ構造は内部でハッシュ値を使用するため、ハッシュ可能であると、オブジェクトが辞書キーおよびセットメンバーとして使用可能になります。

Pythonのすべての不変の組み込みオブジェクトはハッシュ可能です。リストや辞書などの可変コンテナはハッシュ可能ではありませんが、不変コンテナタプルはハッシュ可能です

ユーザー定義クラスのインスタンスであるオブジェクトは、デフォルトでハッシュ可能です。それらはすべて等しくなく(それら自体を除いて)比較され、それらのハッシュ値はそれらのid()から導出されます。

ハッシュは必ずしも関数のIDではないようです。与えられたラムダ関数を検討してください。

m = lambda x: 1
print hash(m)
print id(m)
print m.__hash__()
出力
1265925722
3074942372
1265925722
これは、ラムダ関数がハッシュ可能であることを示しています

ここで、与えられた関数f()を次のように考えてみましょう

def f():pass
print type(f)
print f.__hash__()
print hash(f)
出力
<type 'function'>
1265925978
1265925978

これは、関数がその存続期間にわたって同じままであるハッシュ値を持っているため、どの関数もハッシュ可能であることを示しています。


  1. ハッシュ関数とハッシュテーブル

    ハッシュは、ハッシュ関数と呼ばれる数学関数を使用して、テキストまたは数値のリストから値を生成するプロセスです。数値の数値または英数字のキーを使用するハッシュ関数は多数あります。さまざまなハッシュ関数を以下に示します。 ハッシュ関数 以下はハッシュ関数の一部です- 除算方法 これは、ハッシュ関数を作成する最も簡単な方法です。ハッシュ関数は次のように記述できます- h(k) = k mod n ここで、h(k)は、キー値kをハッシュテーブルnのサイズで除算して得られるハッシュ値です。キーがより均一に分散されるようにするため、nは素数であることが最善です。 除算法の例は次のとおりです- k=

  2. Python関数はどのようにして関数を返すことができますか?

    Pythonはファーストクラスの関数をサポートしています。実際、Pythonのすべての関数はファーストクラスの関数です。 Pythonは関数から関数を返し、リストなどのコレクションに関数を格納し、通常は変数やオブジェクトと同じように扱います。 他の関数で関数を定義し、関数を返すことはすべて可能です。 指定されたコードは次のように作り直されています。関数内で関数を定義し、これらを返します。 例 def f2(c, d):     return c, d def f1(a, b):     c = a + 1     d = b +