2017-01-31 3 views
-1

Интересно, почему 'print' не может использоваться в функции отображения python? Я предполагаю, что печать также функция так это должно работать как карта работает на функции в документации: map(function, iterable, ...)Почему мы не можем применить функцию карты для печати python?

a=[1,2,3,4] 
map(print,a) 
+1

Вы на самом деле можете ... –

+0

Знаете ли вы, что делает 'print'? Вы знаете, что он возвращает? –

+0

Почему этот помеченный словарем? –

ответ

2

Вы не итерация над map() объектом, поэтому никаких вызовов функции не выполняются. map() не сразу применяет вызовы; только по мере того, как вы выполняете результаты с итератора, являются элементами из введенной последовательности ввода и имеют функцию print().

Если вы зациклились на объекте map(), код работает; например, с помощью list() вызова:

>>> a = [1, 2, 3, 4] 
>>> it = map(print, a) 
>>> list(it) 
1 
2 
3 
4 
[None, None, None, None] 
1

В вы на самом деле может применять print в map. print будет всегда возвращает None, но это не проблема.

Единственная проблема с что ленивыеmap работы: он возвращает генератор, который будет вычислять только элементы, если они необходимы. Чтобы заставить Python работать, вам нужно материализовать результат map как-то. Вы можете, например, сделать это с list(..):

$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a=[1,2,3,4] 
>>> list(map(print,a)) 
1 
2 
3 
4 
[None, None, None, None] 

В , print является не функция и, таким образом, вы не можете предоставить его map.

+0

Виллем, спасибо за ответ.почему он не печатает ни один? Должен ли он печатать элементы в списке, как определено в определении карты? – curious

+0

@curious: потому что функция 'print' делает ** не' return '** что-то, и в этом случае Python будет возвращать' None'. Таким образом, последняя строка является результатом карты. –

+0

Получил его, Он не возвращает ничего, потому что печать ничего не возвращает – curious

1

В Python 2, print не является функцией, поэтому map(print,[]) запускает недействительный синтаксис.

Обходное решение Python 2 предназначено для использования функции real для записи на стандартный выход. sys.stdout.write будет почти кандидатом, но вы должны добавить новую строку + преобразование строкового примерно эмулировать, что print делает:

map(lambda x: sys.stdout.write(str(x)+"\n"),a) 

Он работает в Python 3 (но map не, если вы не заставить итерацию)

EDIT: from __future__ import print_function также позволяет использовать print как функция