Programing

reduce ()의 문제점은 무엇입니까?

lottogame 2020. 11. 18. 08:23
반응형

reduce ()의 문제점은 무엇입니까?


파이썬 3.0에서 reduce () 함수의 변경 사항과 제거 방법에 대해 인터넷에서 많은 열띤 토론이있는 것 같습니다. 왜 그런지 이해하는 데 약간의 어려움이 있습니다. 다양한 경우에 사용하는 것이 합리적이라고 생각합니다. 경멸이 단순히 주관적이라면 그렇게 많은 사람들이 그것에 대해 관심을 가질 것이라고 상상할 수 없습니다.

내가 무엇을 놓치고 있습니까? reduce ()의 문제점은 무엇입니까?


Guido 가 Python 3000 게시물 의 The fate of reduce ()에서 말했듯이 :

이제 reduce (). 이것은 실제로 내가 항상 가장 싫어했던 것입니다. reduce ()가 무엇을해야하는지 이해하기 전에 그 함수에 실제로 공급되는 것이 무엇인지 다이어그램. 그래서 내 생각에 reduce ()의 적용 가능성은 연관 연산자로 거의 제한되어 있으며 다른 모든 경우에는 축적 루프를 명시 적으로 작성하는 것이 좋습니다.

혼란의 훌륭한 예입니다 reduce기능적 프로그래밍 하우투 문서 :

빨리, 다음 코드는 무엇을하나요?

total = reduce(lambda a, b: (0, a[1] + b[1]), items)[1]

당신은 그것을 알아낼 수 있지만, 무슨 일이 일어나고 있는지 파악하기 위해 표현을 풀어내는 데 시간이 걸립니다. 짧은 중첩 def 문을 사용하면 상황이 조금 더 좋아집니다.

def combine (a, b):
    return 0, a[1] + b[1]

total = reduce(combine, items)[1]

그러나 단순히 for 루프를 사용했다면 가장 좋을 것입니다.

total = 0
for a, b in items:
    total += b

또는 sum () 내장 및 생성기 표현식 :

total = sum(b for a,b in items)

reduce ()의 많은 사용은 for 루프로 작성할 때 더 명확합니다.


reduce()제거되지 않고 단순히 functools모듈 로 이동하는 것 입니다. Guido의 추론은 합계와 같은 사소한 경우를 제외하고는 사용하여 작성된 코드가 reduce()누적 루프로 작성 될 때 일반적으로 더 명확 하다는 것입니다 .


사람들은 그것이 더 명확한 방법으로 달성 할 수있는 일을하는 난독 화 된 프로그래밍 스타일을 장려한다고 걱정합니다.

나는 자신을 줄이는 것에 반대하지 않으며 때로는 유용한 도구라고 생각합니다.


reduce가 존재하는 주된 이유는 누산기를 사용하여 명시적인 for 루프를 작성하지 않는 것입니다. 파이썬에는 기능적 스타일을 지원하는 몇 가지 기능이 있지만 권장되지는 않습니다. '파이썬'기능이 아닌 '진짜'스타일을 좋아한다면, 대신 현대적인 Lisp (Clojure?) 또는 Haskel을 사용하세요.

참고 URL : https://stackoverflow.com/questions/181543/what-is-the-problem-with-reduce

반응형