Почему 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.

6 Solutions collect form web for “Почему map (print, a_list) не работает?”

В 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.x – это сделать

 from __future__ import print_function 

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

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

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

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

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

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

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

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

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

Вывод:

 1 2 3 

Вы можете найти более подробно об этом в своем ответе « Использовать печать внутри лямбда» .

  • Полоса прокрутки на странице Matplotlib
  • Как проверить, зашифрован ли zip-файл, используя стандартный zip-файл стандартной библиотеки python?
  • Subparser - показать справку как для синтаксического анализатора, так и для подпарамера
  • Запустить скрипт в переднем плане на загрузочной малине Pi
  • ImportError: нет модуля с именем extern
  • Установленный нос, но не может использоваться в командной строке
  • Заполнение непрерывного кадра данных pandas из разреженного кадра данных
  • Имитировать Python нажатия клавиш для управления игрой
  • dict () vs {} в python, что лучше?
  • Как мультиплексировать несколько блокирующих генераторов Python в один?
  • Как я могу читать файл CSV за строкой, отслеживая заголовки столбцов?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.