Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2015 20:47:59

dobriy_dada
Зарегистрирован: 2015-09-04
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Как присвоить значение из *args

Здравствуйте, подскажите пожалуйста как присваивать значения если даётся переменное количество символов *args. То есть может быть задано от 1 до 3 параметров. Почему python “ругается” на эту строку кода?

if len(args) == 1:
        r=*args
- это если задано одно значение
Как мне присвоить значение переменной r ?
Также для кортежа из двух параметров
if len(args) == 2:
        a,b = *args
- тоже выскакивает ошибка SyntaxError

Отредактировано dobriy_dada (Окт. 29, 2015 20:48:33)

Офлайн

#2 Окт. 29, 2015 20:50:55

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Как присвоить значение из *args

a, b = args

Офлайн

#3 Окт. 29, 2015 20:58:07

dobriy_dada
Зарегистрирован: 2015-09-04
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Как присвоить значение из *args

Точно, спасибо, но тогда если *args - это одно число, что r=args это уже кортеж
То есть другого варианта кроме

 r=args[0]
нету?

Отредактировано dobriy_dada (Окт. 29, 2015 20:58:27)

Офлайн

#4 Окт. 30, 2015 00:14:37

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как присвоить значение из *args

dobriy_dada
не *args, а args
переменная имеет имя args, символ * в объявлении переменных функции является следующим:

Lutz
Переменное число аргументов: прием произвольного числа
аргументов, позиционных или в виде ключей
Функции могут использовать специальный аргумент, имени
которого предшествует символ *, для объединения произвольного числа
дополнительных аргументов в коллекцию (эта особенность часто
называется varargs, как в языке С, где также поддерживаются
списки аргументов переменной длины).
Т.о. внутри кода кострукция кода в виде *args употреблять нелья, потому что интерпретатором будет символ * будет восприниматься как оператор умножения.
dobriy_dada
У кортежа нет. А чем он вас не устраивает?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Окт. 30, 2015 04:24:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как присвоить значение из *args

JOHN_16
Т.о. внутри кода кострукция кода в виде *args употреблять нелья, потому что интерпретатором будет символ * будет восприниматься как оператор умножения.
У неё несколько смыслов
>>> print(*[1, 2, 3])
1 2 3
>>>

dobriy_dada
То есть другого варианта кроме
Другого варианта нет.



Офлайн

#6 Окт. 30, 2015 06:23:48

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как присвоить значение из *args

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

P.S. прошу прощения если не ясно, плохая рабочая пятница - выражаюсь плохо, код пишу с опечатками, душа уже требует отдыха)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Окт. 30, 2015 06:59:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как присвоить значение из *args

JOHN_16
Про распаковку функциями я во врезке указал.
Не, там речь не про распаковку, а про количество переданных аргументов.

>>> def f(*args):
...    print(args)
... 
>>> f(1)
(1,)
>>> f('abc')
('abc',)
>>>
'abc' не распаковалась.
У звёздочки в определении функции смысл в поглощении любого числа аргументов, тогда как у звёздочки в вызове функции смысл в прохождении по всем элементам одного аргумента (распаковка).



Отредактировано py.user.next (Окт. 30, 2015 07:00:22)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version