如何以字典为输入获取函数/方法的输出?求实现示例
将字典输入转换为链式方法调用的实现示例
需求说明
输入一个以属性名为键、参数元组为值的字典,需要生成model.属性名.range(参数)形式的方法调用代码或直接执行这些调用。
输入示例
ranparams ={ "scale": (0.04, 0.08), "radius": (4000,6000), }
期望输出
model.scale.range(0.04, 0.08) model.radius.range(4000, 6000)
实现示例
1. 生成代码字符串(用于输出或保存)
如果只是需要把字典转换成对应的代码文本,用循环拼接字符串即可:
ranparams = { "scale": (0.04, 0.08), "radius": (4000, 6000), } code_lines = [] for attr, params in ranparams.items(): param_str = ", ".join(map(str, params)) code_line = f"model.{attr}.range({param_str})" code_lines.append(code_line) # 打印结果 for line in code_lines: print(line)
运行后会直接输出期望的方法调用代码。
2. 动态执行方法调用(程序内调用)
如果model是实际存在的对象,且对应属性拥有range方法,用getattr动态获取属性并调用方法:
# 先模拟定义model及相关类(实际场景中model应为已存在的对象) class RangeAttr: def range(self, min_val, max_val): print(f"设置{self.name}范围为({min_val}, {max_val})") class Model: def __init__(self): self.scale = RangeAttr() self.scale.name = "scale" self.radius = RangeAttr() self.radius.name = "radius" model = Model() ranparams = { "scale": (0.04, 0.08), "radius": (4000, 6000), } # 遍历字典执行调用 for attr, params in ranparams.items(): attr_obj = getattr(model, attr) attr_obj.range(*params)
运行后会直接执行每个属性的range方法,输出对应的操作提示。
内容的提问来源于stack exchange,提问作者Youngju Kim
相关产品推荐
相关产品推荐

