Почему я получаю SyntexError: non-keyword arg после keyworkd arg, когда моя функция не указывает аргументы ключевого слова в Python?

Я читал о позиционных аргументах и ​​аргументах ключевых слов, но до сих пор не понимаю, почему я получаю SyntexError: non-keyword arg after keyworkd arg при выполнении следующего кода. Я не указал аргументы ключевого слова в своей целевой функции, верно?

def obj_func(center, P, ACCUM, sentiment):
    d = 0
    for row in range(ACCUM[sentiment-1],ACCUM[sentiment]):
        v = P[row,:]
        d += v.dot(center) / (norm(v) * norm(center))
    return(-d)

iter_init = np.array([random() for ele in range(k)])
CENTERS = dict()
for sentiment in range(3):
    CENTERS[sentiment] = minimize(obj_func, x0=iter_init, args(P,ACCUM,sentiment),)

Кроме того, я не уверен, что последняя запятая в minimize(). Парень в учебнике написал так. Это правильно?


person Paw in Data    schedule 01.05.2020    source источник
comment
Нет, последняя запятая неправильная   -  person faressalem    schedule 01.05.2020


Ответы (1)


Сообщение об ошибке вызвано тем, что в строке CENTERS[sentiment] = minimize(obj_func, x0=iter_init, args(P,ACCUM,sentiment),) у вас есть аргумент ключевого слова x0=iter_init, а после этого у вас есть аргумент не ключевого слова args(P,ACCUM,sentiment)

Здесь args — это функция, которую вы вызываете и добавляете значения, которые она возвращает в качестве аргумента. Бьюсь об заклад, вы хотите указать аргумент ключевого слова с именем args, который является кортежем. В этом случае вам не хватает =, и правильный синтаксис будет CENTERS[sentiment] = minimize(obj_func, x0=iter_init, args=(P,ACCUM,sentiment))

Если вы не уверены, вы можете проверить аргументы, сказав help(minimize) в консоли Python, как только вы импортируете библиотеку, предоставляющую эту функцию.

person ex4    schedule 01.05.2020