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

如何从字典/JSON文件中同时调用变量与函数并实现混合输出?

解决混合变量与函数调用的模板输出问题

你的核心问题是%字符串格式化只支持变量替换,无法直接识别并调用函数。这里有两种可行方案,从基础到进阶都能满足需求:

方案一:正则替换+本地命名空间调用函数

这种方法不需要额外依赖,适合简单场景。步骤是先完成变量替换,再通过正则匹配函数名并调用替换:

  1. 先调整你的函数,让它返回字符串而不是直接print(因为我们需要把函数结果嵌入到最终输出里,而不是单独打印):
def function_name():
    return "This is the function."
  1. 修改代码,添加正则替换逻辑:
import json
import re

name = 'John'
job = 'student'
def function_name():
    return "This is the function."

with open('json01.json') as json_file:
    json_dict = json.load(json_file)
    template = json_dict['test']
    # 第一步:替换所有变量
    var_processed = template % locals()
    # 第二步:匹配并替换函数调用(格式为(function_name))
    def replace_function(match):
        func_name = match.group(1)
        # 从本地命名空间获取函数
        target_func = locals().get(func_name)
        if callable(target_func):
            # 调用函数(如果需要传参,可以在这里扩展解析逻辑)
            return target_func()
        # 如果不是可调用对象,返回原内容
        return match.group(0)
    # 执行正则替换
    final_output = re.sub(r'\((\w+)\)', replace_function, var_processed)
    print(final_output)

运行后就能得到你想要的输出:Hello! student, John, This is the function.

方案二:使用Jinja2模板引擎(更灵活)

如果你的场景后续可能有更复杂的模板需求(比如函数传参、条件判断等),推荐用专业的模板引擎Jinja2,它天然支持变量和函数调用:

  1. 先安装依赖:
pip install jinja2
  1. 修改json01.json里的模板格式为Jinja2语法:
{ "test" : "Hello! {{ job }}, {{ name }}, {{ function_name() }}" }
  1. 编写Python代码:
import json
from jinja2 import Template

name = 'John'
job = 'student'
def function_name():
    return "This is the function."

with open('json01.json') as json_file:
    json_dict = json.load(json_file)
    # 加载模板
    template = Template(json_dict['test'])
    # 渲染模板,传入变量和函数
    result = template.render(job=job, name=name, function_name=function_name)
    print(result)

这种方法更易维护,比如需要给函数传参时,直接在模板里写{{ function_name('hello') }},代码里调整函数接收参数即可。

关键注意点

  • 原函数用print(message)只会输出内容到控制台,不会返回值,所以必须改成return字符串才能嵌入到模板输出中。
  • 如果函数需要动态参数,方案一需要扩展正则来解析参数(比如匹配(func(arg1, arg2))),而方案二可以直接在模板中传递参数,更便捷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:27:56