如何在我的函数中替换`eval`?
我知道在Python中使用eval
并不是一个好的做法。以下是我的代码:
from hashlib import * # added for clarification
def get_hash(self):
if self.hash_type in ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512']:
data = eval(self.hash_type) # <--- how can I replace this?
我听说过setattr
这个函数,但老实说我不知道怎么用。
请问用map
函数也能做到这个吗?
需要注意的是,'md5', 'sha1', 'sha224'
等都是局部变量。当我对其中一个使用eval
函数时,它们就变成了函数。
2 个回答
3
为什么不把所有的信息都存储在一个字典里呢?比如:
self.hash_types = {
'md5': md5,
'sha1': sha1,
...
}
然后在 get_hash
这个函数里:
def get_hash(self):
if self.hash_type in self.hash_types:
data = self.hash_types[self.hash_type]
另外,
def get_hash(self):
data = self.hash_types.get(self.hash_type, self.DEFAULT)
6
你可以使用 getattr
这个函数:
import hashlib
if self.hash_type in ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512']:
func = getattr(hashlib, self.hash_type)