Как я могу использовать SyntaxError: позиционный аргумент следует за аргументом ключевого слова - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь запустить этот код здесь:

threads = [threading.Thread(name='ThreadNumber{}'.format(n),target=SB, args(shoe_type,model,variant)) for size in SizeList for n in range(ThreadCount)]

Однако вот что возвращает мой терминал:

   threads = [threading.Thread(name='ThreadNumber{}'.format(n),target=SB, args(s
hoe_type,model,variant)) for size in SizeList for n in range(ThreadCount)]
                                                                           ^

SyntaxError: positional argument follows keyword argument

Есть ли способ исправить это?

SB ссылается на функцию, которую я пытаюсь запустить.

1 Ответ

1 голос
/ 04 августа 2020

В Python порядок, в котором мы передаем (и получаем) аргументы функции, имеет значение.

Позиционные аргументы идут первыми, переменной длины далее идут аргументы, аргументы ключевого слова переменной длины идут последними.

Ожидаемый синтаксис выглядит следующим образом:

function(arg, *args, **kwargs)

Приведенные выше имена аргументов являются лишь стандартными примерами, поэтому реальная функция будет выглядеть так:

about_user(name, *hobbies, **favorite_foods)

Если мы вызываем (или получаем) с неупорядоченными типами аргументов, мы получаем ошибки, аналогичные той, с которой вы столкнулись. В вашем конкретном случае c ваши аргументы ключевых слов являются первыми, когда они должны быть последними.

Я написал небольшую статью о *args и **kwargs, в которой есть еще несколько связанные детали и примеры.

...