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

Python如何跨函数调用其他方法内的变量完成JSON构建?

问题原因

PersonID、PhoneID这类在函数内部定义的变量属于函数局部作用域,仅在对应函数运行时的内部上下文生效,外部的jsonAPI函数无法直接读取这类局部变量。你实现的两个Builder函数本身已经返回了封装好所有字段的字典,不需要单独提取每个局部变量使用。

修复方案

直接在jsonAPI函数内调用两个Builder函数拿到返回的字典对象,再将两个字典的字段合并到目标JSON结构中即可,同时补全原代码缺失的模块导入、入口调用、字符编码兼容逻辑:

import json
# 若使用Flask框架的jsonify方法保留此导入,否则可删除
from flask import jsonify

def PersonBuilder():
    PersonID = 1
    PersonName = "Behzat"
    PersonSurname = "Çözer"
    PersonCompany = "EGM"
    PersonTitle = "Başkomiser"
    return {
        'PersonID': PersonID,
        'PersonName': PersonName,
        'PersonSurname': PersonSurname,
        'PersonCompany': PersonCompany,
        'PersonTitle': PersonTitle
    }

def PhoneNumberBuilder():
    PhoneID = 1
    PhoneCountry = "Turkey"
    PhoneOperator = "TR XXXXXX"
    PhoneNumber = "+905XXXXXXXX"
    return {
        'PhoneID': PhoneID,
        'PhoneCountry': PhoneCountry,
        'PhoneOperator': PhoneOperator,
        'PhoneNumber': PhoneNumber
    }

def jsonAPI():
    # 调用构造函数拿到预定义的字典数据
    person_info = PersonBuilder()
    phone_info = PhoneNumberBuilder()
    # 合并两个字典到目标JSON结构
    myjson3 = {
        "Person": {**person_info, **phone_info}
    }

    # 用with语句自动管理文件关闭,指定utf8编码避免乱码
    with open("myfile.json", "w", encoding="utf-8") as out_file:
        # ensure_ascii=False保证非英文字符正常写入,不被转义
        json.dump(myjson3, out_file, indent=6, ensure_ascii=False)
    return jsonify(myjson3)

if __name__ == "__main__":
    # 入口处需要主动调用函数才会执行逻辑
    jsonAPI()

代码说明

  • {**person_info, **phone_info}是Python 3.5+原生支持的字典合并语法,会把两个字典的所有键值对平铺合并到新字典中,正好匹配你要把人员信息、手机号信息放在同一个Person节点下的需求。
  • 新增的encoding="utf-8"和ensure_ascii=False参数,是为了避免土耳其语这类非ASCII字符在写入文件时被转义成乱码。
  • 用with open()的上下文管理器写法操作文件,不需要手动调用close()方法,能避免文件资源泄露问题。

内容的提问来源于stack exchange,提问作者Behzat Ç.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:51:27