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

Kaggle ML课程中Python函数为何能使用非参数非全局的外部变量

Kaggle ML习题函数运行逻辑说明

你遇到的这个函数能在Jupyter中正常运行的核心原因是Jupyter内核的变量作用域规则:

  • 同一个Notebook内核的所有代码单元格共享同一个全局命名空间,只要你在调用get_score函数之前,已经在其他单元格完成了X、y变量的赋值操作,这两个变量就会被存入全局作用域
  • Python函数查找变量时会优先查找自身局部作用域,找不到的话会自动向上查找全局作用域的同名变量,所以不需要把X、y作为参数传入也能正常调用

该写法的不合理之处

  • 代码可读性差:没有显式声明函数依赖的数据源,第三方拿到代码无法快速明确函数运行需要的入参
  • 复用性低:如果切换数据集或者变量名发生变动,函数会直接报错
  • 存在隐式bug风险:如果全局作用域的X、y后续被意外修改,函数的返回结果也会随之变动,很难定位问题

规范优化写法

建议将X、y作为显式参数传入函数,修改后代码如下:

def get_score(n_estimators, X, y):
    my_pipeline = Pipeline(steps=[
        ('preprocessor', SimpleImputer()),
        ('model', RandomForestRegressor(n_estimators, random_state=0))
    ])
    scores = -1 * cross_val_score(my_pipeline, X, y,
                                  cv=3,
                                  scoring='neg_mean_absolute_error')
    return scores.mean()

调用时直接传入对应数据集即可,例如:get_score(n_estimators=100, X=train_x, y=train_y)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:54:04