Найти - Пользователи
Полная версия: Как присвоить значение из *args
Начало » Python для новичков » Как присвоить значение из *args
1
dobriy_dada
Здравствуйте, подскажите пожалуйста как присваивать значения если даётся переменное количество символов *args. То есть может быть задано от 1 до 3 параметров. Почему python “ругается” на эту строку кода?
if len(args) == 1:
        r=*args
- это если задано одно значение
Как мне присвоить значение переменной r ?
Также для кортежа из двух параметров
if len(args) == 2:
        a,b = *args
- тоже выскакивает ошибка SyntaxError
4kpt_III
a, b = args
dobriy_dada
Точно, спасибо, но тогда если *args - это одно число, что r=args это уже кортеж
То есть другого варианта кроме
 r=args[0]
нету?
JOHN_16
dobriy_dada
не *args, а args
переменная имеет имя args, символ * в объявлении переменных функции является следующим:
Lutz
Переменное число аргументов: прием произвольного числа
аргументов, позиционных или в виде ключей
Функции могут использовать специальный аргумент, имени
которого предшествует символ *, для объединения произвольного числа
дополнительных аргументов в коллекцию (эта особенность часто
называется varargs, как в языке С, где также поддерживаются
списки аргументов переменной длины).
Т.о. внутри кода кострукция кода в виде *args употреблять нелья, потому что интерпретатором будет символ * будет восприниматься как оператор умножения.
dobriy_dada
У кортежа нет. А чем он вас не устраивает?
py.user.next
JOHN_16
Т.о. внутри кода кострукция кода в виде *args употреблять нелья, потому что интерпретатором будет символ * будет восприниматься как оператор умножения.
У неё несколько смыслов
>>> print(*[1, 2, 3])
1 2 3
>>>

dobriy_dada
То есть другого варианта кроме
Другого варианта нет.
JOHN_16
py.user.next
У неё несколько смыслов
я то знаю, я хотел сказать на том конкретном примере что так нельзя т.е. использование * в том смысле ограничена несколькими сферами применения, и после оператора присваивания не одно из них.
Про распаковку функциями я во врезке указал.

P.S. прошу прощения если не ясно, плохая рабочая пятница - выражаюсь плохо, код пишу с опечатками, душа уже требует отдыха)
py.user.next
JOHN_16
Про распаковку функциями я во врезке указал.
Не, там речь не про распаковку, а про количество переданных аргументов.

>>> def f(*args):
...    print(args)
... 
>>> f(1)
(1,)
>>> f('abc')
('abc',)
>>>
'abc' не распаковалась.
У звёздочки в определении функции смысл в поглощении любого числа аргументов, тогда как у звёздочки в вызове функции смысл в прохождении по всем элементам одного аргумента (распаковка).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB