我正在随便阅读 Python 模块hashlib。从我看到的文档中,我可以使用 hashlib.md5() 来调用 md5。我想知道该代码是如何工作的?在hashlib.py 源代码中,在我看来__get_builtin_constructor
可能是用 md5 调用的,但我不知道代码是如何工作的。是的,我可以看到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)
该__get_hash
函数映射到__get_builtin_constructor
或__get_openssl_constructor
取决于 openssl 的可用性。
假设 openssl 不可用。这就是它的样子……
for __func_name 行将迭代
__always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')
并且会在模块范围(globals())中添加对每个的引用。当你打电话时hashlib.md5()
,首先它使用
66 def __get_builtin_constructor(name):
定义一个返回的可调用对象。在md5
它返回的情况下
73 return _md5.new
由于它是返回的可调用对象,因此由于 后面的括号而进行了调用hashlib.md5
。
于 2013-07-31T04:04:16.380 回答