Подтвердить что ты не робот

Почему map (print, a_list) не работает?

Для нормальной функции map работает хорошо:

def increment(n):
    return n+1
l = [1, 2, 3, 4, 5]
l = map(increment, l)
print l
>>> [2, 3, 4, 5, 6]

Однако, если он print помещается внутри функции map:

l = [1, 2, 3, 4, 5]
l = map(print, l)
print l

python будет жаловаться:

l = map(print, l)
            ^
SyntaxError: invalid syntax

Что делает print особенным? Не выполняет ли print(x) действительный вызов функции? Вышеупомянутый код тестируется под python 2.7.

4b9b3361

Ответ 1

В Python 2.x, print - это оператор, а не функция. Если вы попробуете это в Python 3.x, он будет работать.

В Python 2.x вы можете сказать print(x) и это не синтаксическая ошибка, но на самом деле это не вызов функции. Точно так же, как 1 + (3) совпадает с 1 + 3, print(x) совпадает с print x в Python 2.x.

В Python 2.x вы можете сделать это:

def prn(x):
    print x

Затем вы можете сделать:

map(prn, lst)

и он будет работать. Обратите внимание, что вы, вероятно, не хотите делать lst = map(prn, lst), потому что prn() возвращает None, поэтому вы замените свой список значений одним и тем же списком только значения None.

EDIT: два других решения для Python 2.x.

Если вы хотите полностью изменить поведение print, вы можете сделать это:

from __future__ import print_function

map(print, lst)

Это делает print в функции так же, как и в Python 3.x, поэтому она работает с map().

Или вы можете сделать это:

from pprint import pprint

map(pprint, lst)

pprint() - это функция, которая печатает вещи и доступна как встроенная. Я не совсем уверен, как он отличается от стандартного print (он говорит, что это функция "довольно-печатная", но я не уверен, как именно это делает его другим).

Кроме того, согласно стандарту PEP 8, не рекомендуется использовать l в качестве имени переменной, поэтому вместо этого я использую lst в моих примерах.

http://www.python.org/dev/peps/pep-0008/

Ответ 2

Лучший способ распечатать печать в 2.x - это сделать

from __future__ import print_function

Ответ 3

Как говорили другие, в Python 2.x print есть инструкция. Если вы действительно хотите это сделать в Python 2.x, вы можете использовать pprint:

from pprint import pprint
l = [1, 2, 3, 4, 5]
p = map(pprint, l)

Ответ 4

Из вашей строки print l я предполагаю, что это python2, где print есть не функция, это оператор.

Ответ 5

Потому что print не является функцией.

Но вы можете сделать печать-обертку, конечно:

>>> def p(x):
...   print x
... 
>>> l = [1, 2, 3, 4, 5]
>>> l = map(p, l)
1
2
3
4
5

Ответ 6

Вышеупомянутые ответы работают на Python 2, но не на Python 3 с изменениями как на карте, так и на функции печати. ​​

Решение, к которому я пришел, чтобы достичь того, что я хотел сделать map(print, lst) для Python 3, - это распаковать список внутри вызова печати. ​​

lst = [1, 2, 3]
print(*lst, sep='\n')

Вывод:

1
2
3

Об этом можно узнать более подробно в своем ответе на Использовать печать внутри лямбда.