[英]python reduce return function reference and not the value of the function
学习Python。我在学习reduce(),在玩初始化参数。 该代码仅输出字符串列表的 SHA256 hash。 起初我使用 for 循环生成 hash。然后,我使用 functools.reduce() 尝试做同样的事情。
import functools
import hashlib
def hash_two_strings(a,b):
c = a + b
h = hashlib.sha256(c.encode()).hexdigest()
return h
c1 = ['3', 'sha256', 'C=US,O=Entrust', 'CN=review.mysite.com', '1c:08:ea:51', '2/11/2022', '2/11/2023', 'RSA', '2048']
h = hashlib.md5(c1[0].encode()).hexdigest()
for i in range(1, len(c1)):
s = h+c1[i]
h = hashlib.sha256(s.encode()).hexdigest()
print (h)
h = functools.reduce(lambda a, b: hash_two_strings, c1[1:], hashlib.sha256(c1[0].encode()).hexdigest())
print (h)
Output:2b9d651fee9c0ddc75477be6dba8d1d3600551cf2e355e9f4788d3c728d237a3 <函数 hash_two_strings 在 0x000001FF9B6A3E20>
但是,reduce() 似乎想要返回对我编写的 hash_two_strings() function 的引用,而不是我期望的实际 hash。 关于我如何错误地使用 reduce() 的任何想法,因为我看不到它。
有两种方法可以解决您的问题:
h = functools.reduce(hash_two_strings, c1[1:], hashlib.sha256(c1[0].encode()).hexdigest())
print (h)
或者:
h = functools.reduce(lambda a, b: hash_two_strings(a, b), c1[1:], hashlib.sha256(c1[0].encode()).hexdigest())
因为之前使用的lambda
忽略了a,b
arguments 并且只返回了hash_two_strings
function object。
请记住,如果您在不带括号的情况下编写function
,则它只是一个 function object,而不是调用 function 的结果:
>>> def round_3_point_5(): return round(3.5)
...
>>> round_3_point_5
<function round_3_point_5 at 0x7f04d347b700>
>>> round_3_point_5()
4
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.