2016-12-08 3 views
4

У меня проблема с пониманием, почему распаковка не работает со списком и распечатать заявление в Python 2.7:Распаковка список в печати для Python 2

>>> l=['a', 'b', 'c'] 
>>> print (*l, sep='') 

Python 3.x прекрасно работает и печатает:

abc 

Python 2.7, однако, вызывает ошибку:

print (*l, sep='') 
    ^
SyntaxError: invalid syntax 

Как я могу заставить его работать на Python 2.7?

Я знаю, что могу в качестве альтернативы закодировать его с помощью присоединиться: ''.join(l)

+0

В Python нет оператора '*' 2. –

+1

@EliSadoff: уверен, что есть. Это [оператор умножения] (https://docs.python.org/2/reference/expressions.html#binary-arithmetic-operations) (как в 2, так и 3). '*' в вызовах или определениях функций не является оператором, но существует и в Python 2. –

+0

@MartijnPieters Позвольте мне исправить себя, нет унарного оператора '*' в python 2. –

ответ

4

Поскольку print не функция в Python 2; распаковка списка и предоставление его в качестве позиционных аргументов невозможно, если это не функция.

Вам нужно импортировать print_function из __future__, чтобы поддержать это:

>>> from __future__ import print_function 

Теперь распаковка можно:

>>> l = ['a', 'b', 'c'] 
>>> print(*l, sep='') 
abc 
+0

Добро пожаловать в будущее;) Спасибо большое Jim – user1898781

+0

@ user1898781 Рад помочь! Не стесняйтесь принять один из ответов, если вы считаете, что он решил вашу проблему, нажав на галочку под партитурой. :-) –

3

У вас есть два варианта:

  • Преобразование в строки и объединение с пробелами вручную:

    print ''.join(map(str, l)) 
    
  • Используйте print()function, используя from __future__ импорт, который отключает printзаявление:

    from __future__ import print_function 
    
    print(*l, sep='') 
    

    или непосредственно вызвать функцию доступа к нему через __builtin__ module:

    import __builtin__ 
    print_function = getattr(__builtin__, 'print') 
    
    print_function(*l, sep='') 
    

    Эта же функция доступна и в Python 2 и 3, но в Python 2 вы не можете использовать его напрямую, не отключая ключевое слово.

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