Я смотрел на scikit-learn
реализацию sklearn.model_selection.train_test_split
. У 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, ...):
# ...
Есть ли преимущества распаковки в функции?