无法将变量传递给函数

时间:2011-03-03 17:28:33

标签: python function

我正在尝试构建一个为文件计算哈希值的函数。该函数接受参数,文件名和生成的算法:

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

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

hashvalue = hashlib.md5(f.read()).hexdigest

Andy.l

4 个答案:

答案 0 :(得分:10)

不要在函数内部使用hashlib。只需将该函数作为参数使用即可。

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

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

getHashValue(filename, hashlib.md5)

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

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

用以下内容打电话给:

getHashValue(filename, 'md5')

答案 1 :(得分:0)

您正在寻找getattr

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

答案 2 :(得分:0)

您必须将哈希参数作为字符串传递并使用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(“foo.txt”,“md5”)

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

答案 3 :(得分:0)

假设Hash是str,你需要使用“getattr”来获得你想要的功能:

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