函数中未提前声明的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
相关产品推荐
相关产品推荐

