2013-12-17 3 views
1
>>> map(max, 'spam', 'potato') 
['s', 'p', 't', 'm', 't', 'o'] 

파이썬의 map은 여러 개의 반복 가능을 사용할 수 있습니다. 왜 이것이 여기에 있습니까, 그것이 필요한 또는 유용한 곳에 전형적인 경우를 보여줄 수 있습니까? 또한 iterables가 모두 같은 길이가 아닌 경우, 2.x 패드는 None으로 왜 왜곡됩니까? - 어딘가에 PEP가 있습니까? 아니면이 변경을위한 이론적 근거에 관한 토론입니까?여러 args가있는 맵 사용

그들은 일반적으로 과 map의 작업을 한 번에 처리 할 수 ​​있기 때문에 이해가 뛰어날뿐 아니라 명확하고 읽기 쉽기 때문에 보통 map보다 뛰어난 독해력을 고려합니다. 또한 목록 작성자가 명백한 방법 일 때 map이 사용 된 너무 많은 weirdunpythonic 솔루션을 보았습니다. 나는지도가 언어에있는 이유를 전혀 모르지만, 나는 기능적 스타일에 대해 많이 알지 못한다. 나는 복수의 주장과 관련된 map의 위대한 힘을 놓칠 수 있다고 걱정한다! python3의 map 실제로 itertools.imap 때문에map가 python3에 자릅니다 이유 에 대해서는

+1

귀도 실제로지도''의 강한 반감을 가지고 있으며, 파이썬 3으로 인해에서 제거 사실 계획했던 :

map, filterreduce 및 기타 기능적 측면의 역사에 대한 자세한 내용은 읽기 그러나 대중적 견해로는 그렇지 않았다. http://www.artima.com/weblogs/viewpost.jsp?thread=98196 –

+0

람다가 너무 제한적이고 너무 느리다는 것은 파이썬의 잘못입니다. 그렇지 않으면'map'은리스트 이해가 읽기 어려워지는 경우에 유용 할 것입니다. –

+3

'map'은 이해를 선행합니다. – user2357112

답변

2

, 이것은 단순히이다. 그리고 설명서를 말한다 : 짧은 반복 가능한 대신 짧은 반복 가능 객체에 대한 None에 작성의 을 소진 될 때 map()처럼

하지만이 중지됩니다. 차이에 대한 이유는 (출력을 완전히 평가하기 때문에) 무한 반복자 인자는 일반적 map()위한 오류임을이지만 는 imap() 인수를 공급하는 공통적이고 유용한 방법을 나타낸다.

자르기를 사용하면 map(func, itertools.repeat(5), [1,2,3])과 같은 작업을 수행 할 수 있으며 걱정없이 결과를 반복 할 수 있습니다. 이전 map은 무한 루프입니다.

python3의 가장 중요한 변경 사항 중 하나는 list 대신에 많은 내장 함수가 mapzip을 포함하여 반환된다는 것입니다. 이러한 "증가 된 게으름"은 이러한 기능을 사용하는 방식을 변경하고 따라서 수정 된 동작을 변경했습니다.

왜 나는 python2의 다중 반복문을 map에 사용했는지 모르겠다.

list(itertools.starmap(function, itertools.zip_longest(*iterables))) 

이 일부 코너의 경우 사용을 할 수도 있습니다,하지만 난 그것을 사용 본 적이 : 물론, 그것은 (python3에서) 뭔가에 대한 바로 가기입니다. 아마도 대부분의 사람들은 map이 iterables 시퀀스를 허용한다는 것을 모를 것입니다. AFAIK에는 여러 인수를 사용하여 얻은 수퍼 파워가 없습니다.

이유는 map이 언어로되어 있기 때문에 목록 내재 이전에 map이 있었기 때문입니다. list-comprehensions 전에 그것은 목록을 만드는 데 아주 유용했습니다. Guido did want to remove it에도 불구하고 이전 버전과의 호환성을 위해 제거하지 않았고 실제로 많은 사람들이 그것을 좋아하기 때문에 입니다.The History of Python: Origins of Python's "Functional" Features

+0

와우, 내가 이해할 수없는 언어를 상상조차 할 수 없기 때문에 나는 파이썬에 대한 상대적으로 초보자 인 것 같다. 그것들은 파이썬 wim

+2

@wim 예, 그들은 최신 파이썬 버전의 "킬러 기능"중 하나입니다. Python 2.0은 실제로 완전히 다른 언어입니다. 특히 파이썬 <1.6은 문자열이 메소드를 가지지 않기 때문에 (파이썬 2에서는'string' 모듈이'split','strip' 등의 함수로 가득 차 있습니다). 언어는 지난 10-15 년 동안 많이 개선되었습니다. – Bakuriu