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

函数中未提前声明的df与dv参数为何可直接使用?

问题

我参考教程编写了如下代码,想请教:preprocess函数中的df和dv参数未提前声明,为何能直接作为参数使用?感谢您的帮助!

import os
import pandas as pd
train = pd.read_csv('https://raw.githubusercontent.com/rpi-techfundamentals/spring2019-materials/master/input/train.csv')
test = pd.read_csv('https://raw.githubusercontent.com/rpi-techfundamentals/spring2019-materials/master/input/test.csv')

print(train.columns, test.columns)

from sklearn.impute import SimpleImputer
import numpy as np

cat_features = ['Pclass', 'Sex', 'Embarked']
num_features =  [ 'Age', 'SibSp', 'Parch', 'Fare'  ]


def preprocess(df, num_features, cat_features, dv):
    features = cat_features + num_features
    if dv in df.columns:
      y = df[dv]
    else:
      y=None 
    #Address missing variables
    print("Total missing values before processing:", df[features].isna().sum().sum() )
  
    imp_mode = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
    df[cat_features]=imp_mode.fit_transform(df[cat_features] )
    imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')
    df[num_features]=imp_mean.fit_transform(df[num_features])
    print("Total missing values after processing:", df[features].isna().sum().sum() )
   
    X = pd.get_dummies(df[features], columns=cat_features, drop_first=True)
    return y,X

y, X =  preprocess(train, num_features, cat_features, 'Survived')
test_y, test_X = preprocess(test, num_features, cat_features, 'Survived')
解答

这是Python函数的基础特性:

  • 你在定义preprocess函数时写的df、dv属于形式参数,它们是函数定义时用来接收外部传入值的“占位符”,不需要在函数外部提前声明这些变量名。
  • 当你调用函数时,比如preprocess(train, num_features, cat_features, 'Survived'),这里的train就是传给df的实际参数,'Survived'是传给dv的实参。函数内部会把形参和对应的实参绑定,直接使用df就相当于使用传入的train(或test),使用dv就相当于使用传入的'Survived'。
  • 简单说,函数定义时的参数列表就是在声明这些变量,它们的作用域仅限于函数内部,用来承接调用时传入的具体值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:08:21