当前位置: 首页 > news >正文

Python模块导入机制与FastAPI

Python模块导入机制与FastAPI

声明:本文章使用AI辅助完成
两个程序
branch.py

def function():return "来自函数function"
def main():function()print("这是一个测试!")return
if __name__ == '__main__':main()

main.py

from branch import function
from fastapi import FastAPI, File, UploadFileapp = FastAPI()@app.get("/")
async def call_function():show = function()# 在 FastAPI 中,路由函数(如 call_function)的返回值会被自动转换为 JSON 格式并返回给客户端return {'message':show}

|问| 这是什么写法?我在main.py里调用了function函数,branch.py里main函数里的打印会在main.py运行的时候一起被调用吗?|
|答| 不会,branch.py 里的 main() 函数不会被自动调用,因此 print("这是一个测试!") 也不会执行。
① 为什么 print 不会执行?
这都归功于 Python 中 if name == 'main': 这行神奇的代码。
当你直接运行 branch.py 时
Python 解释器会把 branch.py 当作主程序来执行。此时,name 变量的值就是 'main'。因此,if 条件成立,main() 函数会被执行,你就能在控制台看到打印信息。
当你在 main.py 中 from branch import function 时
Python 解释器会把 branch.py 当作一个模块来导入。此时,name 变量的值是模块的名字,也就是 'branch'。if 条件 if 'branch' == 'main': 不成立,所以 main() 函数里的代码就被跳过了。
这种写法是一种非常优秀的编程习惯,它的作用是防止模块在被导入时执行测试代码或启动脚本。它确保了 branch.py 既可以作为一个独立脚本运行,也可以作为一个模块被其他程序安全地调用。
② 这种写法有一个好处:当运行本程序时通过在main函数里写测试可以判断此程序是否有bug,测试完成其他程序里直接调用主要函数function即可。比如我在毕设中有一个main.py文件,其调用了一个数据预处理的程序

from fastapi import FastAPI, File, UploadFile
from data_preprocessor import preprocessapp = FastAPI()@app.post("/preprocess/")
async def preprocess_endpoint(file: UploadFile = File(...)):try:print(f"[DEBUG] Received file: {file.filename}")contents = await file.read()df = reprocess(contents)print(f"[DEBUG] DataFrame shape before preprocessing: {df.shape}")# preprocess 是同步函数,不需要 awaitprocessed_df = preprocess(df)print(f"[DEBUG] DataFrame shape after preprocessing: {processed_df.shape}")output = io.BytesIO()processed_df.to_csv(output, index=False, encoding='utf-8-sig')output.seek(0)return StreamingResponse(output,media_type="text/csv",headers={"Content-Disposition": f"attachment; filename={file.filename.replace('.csv', '_preprocessed.csv')}"})except Exception as e:error_msg = traceback.format_exc()logging.error(error_msg)print(error_msg)return JSONResponse(status_code=500,content={"message": f"Preprocessing failed: {str(e)}", "details": error_msg})if __name__ == "__main__":import uvicornuvicorn.run(app, host="127.0.0.1", port=8000)

当main文件代码多起来后,debug也更困难。在data_preprocessor.py里写好preprocess和main函数,测试完成后再运行主文件,可以有效提高开发效率

http://www.jsqmd.com/news/711487/

相关文章:

  • [2026.4.21]WIN10.22H2.19045.7184[PIIS]中简优化版 丝滑流畅
  • SQLite PRAGMA
  • 大路灯护眼灯哪个牌子好?落地护眼大路灯灯排行榜前十名品牌推荐
  • Arm GICv3虚拟中断控制器架构与寄存器解析
  • 终极音乐解锁指南:让你的加密音频重获自由播放权
  • IrfanView|轻量高速看图工具(绿色便携)
  • HoVer-Net核实例分割与分类:医学图像分析的深度架构解析与实战指南
  • 八大网盘直链解析技术深度解析:开源工具LinkSwift实现原理与实践指南
  • APK-Installer入门指南
  • 【含最新安装包】最细保姆级教程!OpenClaw 零基础一键部署全步骤
  • 2026年Q2不锈钢镀锌板花箱选型品牌排行与参考 - 优质品牌商家
  • 一曲旧韵逢故人,岁月不负你的样子
  • 成都失联亲友查找:合法高效的技术路径与服务推荐 - 优质品牌商家
  • 医疗C项目必须建立的5级代码审查漏斗:覆盖DO-178C/IEC 62304/FDA SWCG的三重合规验证机制
  • 包装设计公司哪家好?价格差很多时,关键看材质、印刷工艺和实际包装成本
  • 医疗器械显示屏盖板适合什么样的防眩光板材?兼容性与稳定性分析
  • 2026年公共营养师报考实操推荐 附正规渠道参考 - 优质品牌商家
  • 04.工业级 YOLOv8 落地:训练 + 推理 + 优化全解析
  • 3D高斯泼溅与自适应Gabor视频表示技术解析
  • IT故障速查手册:从诊断到解决
  • 延迟求和波束形成(DSB)、最小方差无失真响应(MVDR)波束形成、线性约束最小方差(LCMV)波束形成、广义特征值分解(GEVD)波束形成,以及独立成分分析(ICA)、快速独立成分分析
  • BabelDuck开源AI语言学习工具:部署与实战指南
  • 2026年专业大型粮仓空调厂家top10排行解析:粮库低温空调,粮库恒温恒湿空调,粮面空调,排行一览! - 优质品牌商家
  • [具身智能-483]:OpenAI API:客户端用户、客户端应用程序、客户端OpenAI API库或SDK、云端编排基础设施、云端大模型各种的职责?如何协同完成服务的?
  • Docker WASM边缘编排实战(从K3s到WASI-NN加速器全链路打通)
  • RVC变声器实战指南:从入门到精通的16个核心技巧
  • 终极Windows指针美化指南:如何用macOS风格鼠标指针提升桌面体验
  • LLM代理系统调试技术与分层干预实践
  • LinuxCNC终极指南:从零搭建免费开源数控系统的完整教程
  • 部署与可视化系统:零基础到精通:Vue3 + TypeScript + FastAPI 前后端分离打造企业级云端目标检测 SaaS 平台