You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将函数参数作为hashlib模块的属性动态调用

问题解答

这个需求完全可以实现,你现有代码的问题在于hashlib.hash()是直接尝试调用hashlib模块中名为hash的固定方法,并不会读取你传入的hash参数对应的字符串值,需要用Python内置的getattr()函数动态获取对应算法的构造方法。

修正后可运行的代码

import hashlib

def calculate_file_hash(malware, hash_algorithm):
    # 动态获取hashlib对应的算法构造函数
    hash_func = getattr(hashlib, hash_algorithm)
    h = hash_func()
    with open(malware,'rb') as f:
        chunk = b''
        while True:
            chunk = f.read(1024)
            if not chunk:
                break
            h.update(chunk)
    return h.hexdigest()

# 调用示例
file = "待计算哈希的文件路径"
sha1_val = calculate_file_hash(file, 'sha1')
sha256_val = calculate_file_hash(file, 'sha256')

优化说明

  • 调整了函数名和参数名,避免和Python内置的hash()函数、参数重名导致的冲突问题
  • 修正了原有代码中chunk = 0的初始值错误,整数和字节串的比较逻辑不严谨,修改后的循环逻辑更可靠
  • 若需要增加参数合法性校验,可以在获取构造函数前增加如下判断:
    if hash_algorithm not in hashlib.algorithms_available:
        raise ValueError(f"不支持的哈希算法:{hash_algorithm}")
    
    可以避免传入不存在的算法名时抛出属性异常。

内容的提问来源于stack exchange,提问作者Medling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:36:02