Python 3.10如何将列表中的字符串项转为可调用的模块函数
如何从字符串获取random模块的函数并调用
别用字符串拼接的方式折腾,既不安全又麻烦。直接用Python内置的getattr()函数就能解决,这是从模块/对象里通过字符串名称获取属性(包括函数)的标准方法。
举个完整的实现例子:
import random # 假设你从dir(random)里拿到了"randint"这个字符串,这里直接赋值做示例 func_name = "randint" # 从random模块中获取对应名称的函数 target_func = getattr(random, func_name) # 像调用普通randint函数一样传入参数执行 result = target_func(1, 10) print(result)
如果你之前尝试的类似something(var[55] + "(a, b)")的写法,本质是想通过字符串执行代码,这种场景可能会想到用eval(),但非常不推荐——eval()会执行任意字符串代码,要是字符串来源不可控,很容易引入安全风险,而且代码可读性极差。比如这种写法(仅作反面示例,别用):
import random func_name = "randint" result = eval(f"random.{func_name}(1, 10)")
总之,优先用getattr(),这是最规范、安全的实现方式。
内容的提问来源于stack exchange,提问作者elakhdar_ayoub
相关产品推荐
相关产品推荐

