无法将变量传递给函数

2024-10-03 00:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图构建一个计算文件哈希值的函数。函数接受参数、文件名和要生成的算法:

def getHashValue(fName, Hash):
   f = open(fName, 'rb')
   hashvalue = hashlib.Hash(f.read()).hexdigest
   f.close()
   print(fName + str(Hash) + hashvalue)

我的问题是我不能让Hash参数起作用。我的想法是,如果我使用md5,我会得到这个:

^{pr2}$

安迪,我


Tags: 文件函数算法read参数文件名defhash
3条回答

必须将哈希参数作为字符串传递并使用getattr。在

像这样:

def getHashValue(fName, hash):
    f = open(fName, 'rb')
    hashfun = getattr(hashlib, hash) # Here you assign the function to a variable just to simplify
    hashvalue = hashfun(f.read()).hexdigest
    f.close()

然后你可以打电话给: getHashValue(“食品.txt“,”md5“)

你应该得到你想要的结果。但是要小心,您应该处理不存在哈希算法的情况(例如,您使用了“xyz”而不是“md5”或其他东西)。在

您正在寻找^{}

hashvalue = getattr(hashlib, Hash)(f.read()).hexdigest

不要在函数内部使用hashlib。只需将函数作为参数并使用它。在

def getHashValue(fName,Hash):
   f = open(fName,'rb')
   hashvalue = Hash(f.read()).hexdigest
   f.close()
   print(fName + str(Hash) + hashvalue)

然后,当您调用此函数时,请使用:

^{pr2}$

如果要从字符串中获取哈希函数,请使用getattr。在

hashvalue = getattr(hashlib, Hash)(f.read()).hexdigest

把这个叫做:

getHashValue(filename, 'md5')

相关问题 更多 >