如何在python中传递函数参数作为模块的属性


def hash(malware, hash):
h = hashlib.hash()
with open(malware,'rb') as f:
chunk = 0
while chunk != b'':
chunk = f.read(1024)
h.update(chunk)
return h.hexdigest()
hash(file, 'sha1')
hash(file, 'sha256')

我试图做的是使用属性";sha1";以及";sha256";作为函数参数。

这可能吗?或者有办法做到这一点吗?

首先,不要使用hash作为函数的名称,因为它是标准库中的内置函数。关于你的问题-从hashlib导入你想要的散列函数,并将它们作为对象传递,而不是str

from hashlib import sha1, sha256

def myhash(malware, hashfunc):
h = hashfunc()
with open(malware,'rb') as f:
chunk = 0
while chunk != b'':
chunk = f.read(1024)
h.update(chunk)
return h.hexdigest()
myhash(file, sha1)
myhash(file, sha256)

如果您坚持使用str,请使用getattr()

import hashlib
def myhash(malware, hashfunc):
h = getattr(hashlib, hashfunc)()
with open(malware,'rb') as f:
chunk = 0
while chunk != b'':
chunk = f.read(1024)
h.update(chunk)
return h.hexdigest()
myhash(file, 'sha1')
myhash(file, 'sha256')

让我们将方法更改为这种方式:

def hash(malware, h):
with open(malware,'rb') as f:
chunk = 0
while chunk != b'':
chunk = f.read(1024)
h.update(chunk)
return h.hexdigest()
hash1 = hashlib.sha1()
hash256 = hashlib.sha256()
hash(file, hash1)
hash(file, hash256)

因此,您只需通过函数参数传递_hashlib.HASH(即hash1hash256(。以下是输出示例:

>>> # test.txt --> hello world
>>> hash('test.txt', hash1) 
'2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
>>> hash('test.txt', hash256) 
'524857d0148721c24e3e7795e19ade0cdcf49f2a4dfbef2f1575d1208fa8c54f'

最新更新