私はPythonのhash()
ソルトを個々の関数呼び出しに設定する方法を探しています。ドキュメントでは、のすべての塩を設定するPYTHONHASHSEEDしか見つかりませんでした。をhash()
に呼び出します。 しかし、特定のオブジェクトによって呼び出されたときに常に同じ結果を得るにはhash
が必要ですが、アプリケーション全体に同じ(予測可能な)塩を使用させたくありません。個々の呼び出しのハッシュソルトを設定する
コンテキスト:python2
では、私は、インデックス付きのバケットにキーと値のオブジェクトのペアをソートするhash
を使用しています。バケットは永続的に格納されます。これを逆にして値を取得します。基本的に、すべてのペアのために、私は、これは常にインタプリタの呼び出しを越え、インスタンスごとに私に同じ結果を得るためにhash
を必要
class PDict(object):
def __init__(self, bucket_count, bucket_store_path):
self._path, self.bucket_count = \
self._fetch_or_store_metadata(bucket_store_path, bucket_count)
def __setitem__(self, key, value):
bucket_index = (hash(key)&0xffffffff) % self.bucket_count
self.buckets[bucket_index][key] = value
self._store_bucket(bucket_index)
def __getitem__(self, key):
bucket_index = (hash(key)&0xffffffff) % self.bucket_count
return self._fetch_bucket(bucket_index)[key]
ください。
なぜそうしたいのですか? – jonrsharpe
バケットは永続的に格納されるので、私はバケットセットごとに同じ 'ハッシュ'ソルトが必要です。最初の問題:固定塩を使用すること**とは、データ構造を使用するすべての**アプリケーションは同じ塩を使用する必要があることを意味します。これは塩の点を打ち負かします。 2番目の問題:動的な塩を使用すると、アプリケーションが**異なる塩を必要とする2つのバケットセットを使用して終了する可能性があることを意味します。これは単なるPYTHONHASHSEEDでは不可能です。 – MisterMiyagi
@jonrsharpe関連の質問に感謝し、それは "不可能"と答えていると推測します。しかたがない。 – MisterMiyagi