Форум сайта python.su
0
Здравствуйте, подскажите пожалуйста как присваивать значения если даётся переменное количество символов *args. То есть может быть задано от 1 до 3 параметров. Почему python “ругается” на эту строку кода?
if len(args) == 1: r=*args
if len(args) == 2: a,b = *args
Отредактировано dobriy_dada (Окт. 29, 2015 20:48:33)
Офлайн
39
a, b = args
Офлайн
0
Точно, спасибо, но тогда если *args - это одно число, что r=args это уже кортеж 
То есть другого варианта кроме
r=args[0]
Отредактировано dobriy_dada (Окт. 29, 2015 20:58:27)
Офлайн
221
dobriy_dada
не *args, а args
переменная имеет имя args, символ * в объявлении переменных функции является следующим:
LutzТ.о. внутри кода кострукция кода в виде *args употреблять нелья, потому что интерпретатором будет символ * будет восприниматься как оператор умножения.
Переменное число аргументов: прием произвольного числа
аргументов, позиционных или в виде ключей
Функции могут использовать специальный аргумент, имени
которого предшествует символ *, для объединения произвольного числа
дополнительных аргументов в коллекцию (эта особенность часто
называется varargs, как в языке С, где также поддерживаются
списки аргументов переменной длины).
Офлайн
857
JOHN_16У неё несколько смыслов
Т.о. внутри кода кострукция кода в виде *args употреблять нелья, потому что интерпретатором будет символ * будет восприниматься как оператор умножения.
>>> print(*[1, 2, 3]) 1 2 3 >>>
dobriy_dadaДругого варианта нет.
То есть другого варианта кроме
Офлайн
221
py.user.nextя то знаю, я хотел сказать на том конкретном примере что так нельзя т.е. использование * в том смысле ограничена несколькими сферами применения, и после оператора присваивания не одно из них.
У неё несколько смыслов
Офлайн
857
JOHN_16Не, там речь не про распаковку, а про количество переданных аргументов.
Про распаковку функциями я во врезке указал.
>>> def f(*args): ... print(args) ... >>> f(1) (1,) >>> f('abc') ('abc',) >>>
Отредактировано py.user.next (Окт. 30, 2015 07:00:22)
Офлайн