Python将函数关键字参数存入列表触发SyntaxError问题求解
问题解决办法
你遇到的语法报错本质是Python不支持直接将key=value形式的关键字参数表达式赋值给变量、或者存入序列,关键字参数只能直接写在函数调用的括号内。要实现批量存储关键字参数、后续统一传入的需求,标准方案是用字典存储参数的键值对,调用函数时用**运算符解包传入即可。
补充提醒:你之前测试的
keyword = end="****"写法能跑完全是巧合:这行代码的实际逻辑是先声明了一个叫end的普通变量赋值为"****",再把end的值赋值给keyword,后续调用print("hi", keyword)时,是把keyword的值作为第二个位置参数传给了print的end参数,刚好匹配了预期效果,但这根本不是存储关键字参数的通用方案,换参数、换函数就会失效。
测试场景修正示例
单个关键字参数
# 字典存储关键字参数:键是参数名,值是参数值 kwargs = {"end": "****"} # 调用时用**解包字典 print("hi", **kwargs) # 输出:hi ****
多个关键字参数
# 多个参数直接存进同一个字典 kwargs = {"sep": "^^^^", "end": "****"} print("hi", "world", **kwargs) # 输出:hi^^^^world****
业务代码修正
第一步:修正参数定义
所有模型参数都改为字典存储,无自定义参数用空字典即可,同时修正你之前写错的SVC核函数名(是rbf不是rgb):
from sklearn.linear_model import LogisticRegression from sklearn.neighbors import KNeighborsClassifier from sklearn.svm import SVC from sklearn.naive_bayes import GaussianNB from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier LogisticRegression_args = {} KNeighborsClassifier_args = {"n_neighbors": 5} GaussianNB_args = {} DecisionTreeClassifier_args = {"criterion": "entropy"} SVC_args = {"kernel": "linear"} SVC_non_linear_args = {"kernel": "rbf"} RandomForestClassifier_args = {"criterion": "entropy", "n_estimators": 10, "random_state": 0}
第二步:简化模型列表
不需要把类、参数再套一层列表,直接按顺序存储即可:
basic_classifier_models = [ [LogisticRegression, LogisticRegression_args, "LogisticRegression:"], [KNeighborsClassifier, KNeighborsClassifier_args, "KNeighborsClassifier:"], [GaussianNB, GaussianNB_args, "GaussianNB:"], [DecisionTreeClassifier, DecisionTreeClassifier_args, "DecisionTreeClassifier:"], [SVC, SVC_args, "SVC:"], [SVC, SVC_non_linear_args, "Non_linear SVC:"], [RandomForestClassifier, RandomForestClassifier_args, "RandomForestClassifier:"] ]
第三步:批量调用示例
后续遍历列表初始化模型时,用**解包参数字典传入即可:
for model_class, model_kwargs, model_name in basic_classifier_models: # 解包参数字典初始化模型 current_model = model_class(**model_kwargs) # 后续可正常进行训练、预测等操作 print(model_name, current_model)
内容的提问来源于stack exchange,提问作者temporan
相关产品推荐
相关产品推荐

