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

Python函数主代码内正常,导入functions.py后失效的解决办法

问题原因

你在主模块里定义update_df时,Python函数是调用阶段才查找变量,所以即便df在函数定义后声明,调用时主模块作用域里已经有df,函数能找到并修改。但把函数移到functions.py后,函数的作用域属于functions模块,调用时它会在自己的模块里找df,自然找不到主模块里的变量,所以报错。

解决方案

1. 把df作为参数传入函数(最推荐)

这是Python里最规范的写法,彻底解耦模块依赖,代码更清晰易维护:

  • functions.py里修改函数:
def update_df(df):
    df['x'] = df['y']
  • 主代码里调用时直接传入df:
import pandas as pd
from functions import update_df

df = pd.DataFrame({'y': [1,2,3]})
update_df(df)

2. 显式引用主模块的变量(不推荐,耦合性高)

如果非要让函数直接访问主模块的df,可以在functions.py里导入主模块(假设主文件叫main.py):

  • functions.py:
import main

def update_df():
    main.df['x'] = main.df['y']

但这种写法会让两个模块互相依赖,后续修改主模块文件名或变量名时容易出问题,不建议用。

为什么from functions import *没用?

import *只是把functions.py里的函数、变量复制到主模块的命名空间,但函数本身的作用域还是属于functions模块,函数内部查找变量的逻辑不会变,所以还是找不到主模块的df。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:05:04