2012-08-01 8 views
17
정상적인 기능을 위해

map 잘 작동 :왜 map (print, a_list)이 작동하지 않습니까?

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

을하지만, 그것은 printmap 함수 안에 넣어되고 있는지 :

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

파이썬은 불평 :

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

는 어떻게 만들어 print 특별? print(x)도 유효한 함수 호출을하지 않습니까? 위의 코드는 Python 2.7에서 테스트되었습니다.

답변

21

파이썬 2.x에서 print은 함수가 아니라 명령문입니다. 파이썬 3.x에서 이것을 시도해도 작동 할 것입니다.

파이썬 2.x에서는 print(x)이라고 말할 수 있지만 구문 오류는 아니지만 실제로는 함수 호출이 아닙니다. 1 + (3)1 + 3과 같으므로 print(x)은 Python 2.x에서 print x과 같습니다.

def prn(x): 
    print x 

그런 다음 당신이 할 수 있습니다 :

map(prn, lst) 

을 그리고 그것은 작동합니다

파이썬 2.x에서 당신은이 작업을 수행 할 수 있습니다. lst = map(prn, lst)prn()None을 반환하므로 값 목록을 값이 None 인 동일한 길이의 목록으로 바꿀 것이기 때문에 아마도 원하지 않을 것입니다.

편집 : Python 2.x의 다른 두 가지 솔루션.

from __future__ import print_function 

map(print, lst) 

이 그것을 파이썬 3.x를있는 그대로 함수에 print하게, 그래서 map()와 함께 작동 : 완전히 print의 동작을 변경하려면

, 당신은이 작업을 수행 할 수 있습니다.

또는, 당신은이 작업을 수행 할 수 있습니다

from pprint import pprint 

map(pprint, lst) 

pprint() 물건을 인쇄하는 기능이며 내장으로 사용할 수 있습니다. 나는 그것이 정확히 "pretty-print"함수라고 말하지만 그것이 정확히 어떻게 다른지를 잘 모르겠다.

또한 PEP 8 표준에 따라 l을 변수 이름으로 사용하는 것이 좋지 않으므로 예제 대신 lst을 사용하고 있습니다. 당신의 라인 print l에서

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

+0

그것은 폭발하지 않지만 예상대로 작동하지 않을 가능성이 높습니다. 나는 clwen이 실제로 물건을 프린트하고 싶었고'<0x9a62aec>에서 map 오브젝트를 얻지 못했습니다. '라고 생각합니다. 인쇄하려면지도 객체를 반복해야합니다. –

+0

"파이썬 2.x에서 map (print, [])'을 실행하려고하면'SyntaxError : invalid syntax'가 발생합니다. 왜냐하면'print '은 진술이다. Python 3.x에서'print'가 함수이고'map()'에 전달하는 것이 합법적입니다. 파이썬 2.x에서'map()'은''이 아닌리스트를 반환합니다. – steveha

+0

나는 의미했다 : 네, 맞습니다,'map (print, [])'는 파이썬 3에서 폭발을 일으키지 않습니다 (예외를 던지기). 그러나 예외는 발생하지 않지만 결과는 아마도 원했던 것이 아닙니다. 얻을. –

1

, 나는이 print하지 기능, 그것은 성명의이다 python2, 가정.

4

다른 사람들처럼 파이썬 2.x에서는 print이 성명서입니다.당신이 정말로 파이썬 2.x에서이 작업을 수행하려면 당신은 pprint을 사용할 수 있습니다 : 함수 아니다

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

print 때문입니다.

하지만 당신은 물론, 인쇄 래퍼를 만들 수 있습니다

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

2.X에서 인쇄를 매핑하는 더 좋은 방법은 위의 답변은 파이썬 2 일

from __future__ import print_function 
+1

이렇게하면 더 이상 해당 모듈의 명령문으로'print'를 사용할 수 없습니다. 그것이 이해되는 한, 이것은 할 합당한 일입니다. – steveha

0

을하는 것입니다 그러나 파이썬 3에서는 map과 print 함수 모두가 변경되었다.

내가 원하는 것을 얻기 위해 얻은 해결책 map(print, lst)은 파이썬 3에서 인쇄 호출 내에서 목록을 압축 해제하는 것입니다.

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

출력 : 당신은 Use print inside lambda에 내 대답이 주변을 중심으로 더 많은 세부 사항을 찾을 수 있습니다

1 
2 
3 

.