2013-10-07 5 views
0

У меня проблема с пониманием процесса распаковки аргументов из списка с помощью оператора star в python.python аргумент распаковка недоумение поведение

Я следовал за documentation entry и попытался воссоздать свой собственный маленький пример.

Так я определил простой список цифр:

list = [1, 2, 3] 

и сделал быструю проверку, это работает:

print(1, 2, 3) 
(1, 2, 3) 

и это (только для хедз-ап):

print([1, 2, 3]) 
[1, 2, 3] 

С другой стороны, этот бит не работает:

print(*[1, 2, 3]) 
    File "<stdin>", line 1 
    print(*[1, 2, 3]) 
     ^
SyntaxError: invalid syntax 

И это также не:

print(*list) 
    File "<stdin>", line 1 
    print(*list) 
     ^
SyntaxError: invalid syntax 

Я сделал, что все в документации работы:

list = [1, 2] 
range(*list) 
[1] 

И это сделал.

Я хотел бы понять, как именно аргумент распаковывается из списка, и что ожидать от него, потому что это не выглядит так просто, как я думал.

+1

Вы используете Python 2.7? В этом случае оператор 'print' не является функцией, поэтому оператор звезды не будет работать с ним так, как вы ожидаете. – Kevin

+0

Работает на python3.2! Вы хотите ответить, чтобы я принял ваш ответ? –

ответ

3

Распаковка работает только тогда, когда вы находитесь внутри вызова функции:

>>> def foo(a,b,c): 
...  pass 
... 
>>> foo(*[1,2,3]) 
>>> 

Использование его в другом месте приведет к ошибке:

>>> (*[1,2,3]) 
    File "<stdin>", line 1 
    (*[1,2,3]) 
    ^
SyntaxError: invalid syntax 

В Python 2.7, print не является функцией, это утверждение. Что же касается переводчика, то, это:

print(*[1,2,3]) 

синтаксически эквивалентно следующему:

print *[1,2,3] 

Какой недействительна. В Python 3.X, print теперь функция, поэтому распаковка будет работать.

>>> print(*[1,2,3]) 
1 2 3 

Вы можете порт функционал print обратно до 2,7 за счет импорта из будущего:

>>> from __future__ import print_function 
>>> print(*[1,2,3]) 
1 2 3 
+0

Я думаю, что 'print * [1,2,3]' недействительно –

+1

@FooBarUser, я согласен. Вот почему я написал «... что недействительно» – Kevin

+0

извините неправильно понятое –

0

изменение: print(\*[1, 2, 3]) к: print(*[1, 2, 3])

>>> print(*[1,2,3]) 
1 2 3 

>>> print(\*[1,2,3]) 
    File "<stdin>", line 1 
    print(\*[1,2,3]) 
       ^
SyntaxError: unexpected character after line continuation character 

это не будет работать для python2 печати, потому что его не функция. он будет работать на Python 3. Например:

>>> def x(a,b,c): 
...  print(a,b,c) 

>>> x(*[1,2,3]) 
(1, 2, 3) 
+0

извините, это опечатка в моем посте, я исправлю это сразу –

+0

он работает без \ –

+0

не работает для меня ... Я добавил его здесь из-за форматирования, которое происходит на сайте :) –

Смежные вопросы