@archinati

Как вызвать функцию с неопределенным количеством параметров (*args), в теле функции с неопределенным количеством параметров?

В общем, постараюсь пояснить ситуацию. К примеру, имеется код такой функции:

from scipy.stats import bartlett
def func1(*samples):
    if bartlett(samples)<0.05:
            return False
...
func1(sample1, sample2, sample3, sample4, ...)
...


В свою очередь, функция stats.bartlett() из пакета scipy, выглядит примерно следующим образом:

def bartlett(*args):
...
    for a in args:
        if np.asanyarray(a).size == 0:
            return BartlettResult(np.nan, np.nan)
        if np.asanyarray(a).ndim > 1:
            raise ValueError('Samples must be one-dimensional.')
....


И стоит пояснить как именно работает данная функция

import scipy.stats as ss

In [8]: 
data=[[2,2,2,2,2],[1,1,1,1,1],[3,3,3,3]]
ss.bartlett(*data)

Out[8]: 
(nan, nan)

In [9]:
A=[10,7,20,14,14,12,10,23,17,20,14,13,11,17,21,11,16,14,17,17,19,21,7]
B=[1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,]
ss.bartlett(A, B)

Out[9]:
(47.7068477814218, 4.9495974630644599e-12)


Вопрос: как передать функции stats.bartlett(), необходимые элементы, так как используя *args, можно передавать элементы только прописывая каждый в отдельности, (A, B, ...). Я же не хочу так.

P.s. простите, уснул пока писал вопрос, и сначала опубликовал квакозябру, исправил
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
@o5a
так как используя *args,есть вджишь

вджишь это конечно неприятно.

Так и передавать, тоже с распаковкой (т.к. samples - вложенный список):
def func1(*samples):
    if bartlett(*samples)<0.05:
            return False


Другой вопрос, что результат работы сравнивается со скалярной величиной 0.05, хотя в приведенных примерах функция возвращает какие-то массивы. Но я не в курсе, как ее результаты должны обрабатываться, это уже другой вопрос.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы