Недопустимые синтаксические выражения
Я пытаюсь распаковать набор телефонных номеров из последовательности, оболочка python, в свою очередь, вызывает недопустимую синтаксическую ошибку. Я использую python 2.7.1. Вот фрагмент
>>> record = ('Dave', '[email protected]', '773-555-1212', '847-555-1212')
>>> name, email, *phone-numbers = record
SyntaxError: invalid syntax
>>>
Пожалуйста, объясните. Есть ли другой способ сделать то же самое?
Ответы
Ответ 1
В Python 2 используется специальный синтаксис Python 3.
Синтаксис *
для расширенной итеративной распаковки в назначениях недоступен в Python 2.
Смотрите Python 3.0, новый синтаксис и PEP 3132.
Используйте функцию с распаковкой аргументов *
splat для моделирования того же поведения в Python 2:
def unpack_three(arg1, arg2, *rest):
return arg1, arg2, rest
name, email, phone_numbers = unpack_three(*user_record)
или использовать список фрагментов.
Ответ 2
Этот новый синтаксис был представленный в Python 3. Таким образом, это вызовет ошибку в Python 2.
Связанный PEP: PEP 3132 - Extended Iterable Unpacking
name, email, *phone_numbers = user_record
Python 3:
>>> a, b, *c = range(10)
>>> a
0
>>> b
1
>>> c
[2, 3, 4, 5, 6, 7, 8, 9]
Python 2:
>>> a, b, *c = range(10)
File "<stdin>", line 1
a,b,*c = range(10)
^
SyntaxError: invalid syntax
>>>
Ответ 3
Эта функциональность доступна только в Python 3, альтернатива:
name, email, phone_numbers = record[0], record[1], record[2:]
Или что-то вроде:
>>> def f(name, email, *phone_numbers):
return name, email, phone_numbers
>>> f(*record)
('Dave', '[email protected]', ('773-555-1212', '847-555-1212'))
но это довольно хакерский IMO