gpt4 book ai didi

python - 在函数体中接收 **kwargs 和解包参数而不是简单的参数 - 为什么?

转载 作者:行者123 更新时间:2023-12-04 02:36:54 25 4
gpt4 key购买 nike

我正在查看 sklearn.model_selection.train_test_splitscikit-learn 实现。 Sklearn 通常有高质量的代码,所以我不时阅读它以学习好的做法。但是最近我发现了这样的东西:

def train_test_split(*arrays, **options):
"""
...
"""
n_arrays = len(arrays)
if n_arrays == 0:
raise ValueError("At least one array required as input")
test_size = options.pop('test_size', None)
train_size = options.pop('train_size', None)
random_state = options.pop('random_state', None)
stratify = options.pop('stratify', None)
shuffle = options.pop('shuffle', True)

if options:
raise TypeError("Invalid parameters passed: %s" % str(options))

# ...

我想知道,为什么选择这种方法?这对我来说似乎是一种反模式,但我认为 sklearn 开发人员知道他们在做什么,所以我可能会漏掉一些要点。为什么不只是简单地:

def train_test_split(*arrays, test_size=None, train_size=None, ...): 
# ...

函数内拆包有什么优势吗?

最佳答案

就是控制TypeError给出一个更容易理解的错误。我猜!

使用您提出的方法,错误将是:

TypeError: train_test_split() 得到了一个意外的关键字参数 'not_a_valid_kw'

关于python - 在函数体中接收 **kwargs 和解包参数而不是简单的参数 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61339352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com