私は何気なくPythonモジュールhashlibを読んでいます。ドキュメントから、hashlib.md5() を使用して md5 を呼び出すことができることがわかります。そのコードはどのように機能するのだろうか?hashlib.pyソース コードでは、おそらく md5 で呼び出されるように見えますが__get_builtin_constructor
、コードがどのように機能するかはわかりません。はいmd5
、定義されて__all__
いることがわかりますが、どうやってそこにたどり着きますか?
質問する
109 次
1 に答える
3
鍵はここにあります:
135 for __func_name in __always_supported:
136 # try them all, some may not work due to the OpenSSL
137 # version not supporting that algorithm.
138 try:
139 globals()[__func_name] = __get_hash(__func_name)
関数は、openssl の可用性に応じてまたは のいずれかに__get_hash
マップされます。__get_builtin_constructor
__get_openssl_constructor
openssl が利用できないとしましょう。これは、それがどのように見えるかです...
for __func_name 行は、のキーを反復します
__always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')
そして、モジュール スコープ (globals()) 内のそれぞれへの参照を追加します。を呼び出すとhashlib.md5()
、最初に使用されます
66 def __get_builtin_constructor(name):
返される callable を定義します。md5
返品の場合
73 return _md5.new
返されるのは callable であるため、 の後の括弧のために呼び出しが行われhashlib.md5
ます。
于 2013-07-31T04:04:16.380 に答える