반응형
Haskell에서 다음과 같은 것을 달성하는 가장 관용적 인 방법은 무엇입니까?
foldl (+) 0 [1,2,3,4,5]
--> 15
또는 Ruby에서 이에 상응하는 것 :
[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15
분명히 Python은 위와 같이 fold의 구현 인 reduce
함수를 제공하지만, 'pythonic'프로그래밍 방식은 lambda
를 피하는 것이라고 들었습니다. 용어 및 고차 함수, 가능한 경우 목록 이해를 선호합니다. 따라서 reduce
함수가 아니거나 reduce
가 이것을 달성하는 관용적 방법 인 Python에서 목록 또는 목록과 유사한 구조를 접는 선호하는 방법이 있습니까? ?
해결 방법
def product(xs):
return reduce(operator.mul, xs, 1)
reduce
는 실제로 Haskell 용어로 foldl
입니다. 접기를 수행하는 특별한 구문도없고, 내장 된 foldr
도 없으며, 실제로 비 연관 연산자와 함께 reduce
를 사용하는 것은 잘못된 스타일로 간주됩니다.
고차 함수를 사용하는 것은 매우 비단뱀 적입니다. 함수와 클래스를 포함하여 모든 것이 객체라는 파이썬의 원칙을 잘 활용합니다. 람다가 일부 Pythonistas에 의해 눈살을 찌푸리는 것은 맞지만, 대부분 복잡해지면 읽기가 쉽지 않기 때문입니다.
참조 페이지 https://stackoverflow.com/questions/10366374
반응형
'파이썬' 카테고리의 다른 글
파이썬 목록을 같은 크기의 청크로 분할하는 방법은 무엇입니까? (0) | 2021.02.19 |
---|---|
파이썬 문자열에서 간단한 방법으로 숫자 추출 (0) | 2021.02.19 |
파이썬 동일한 X 좌표가있는 막대 그래프를 나란히 표시하는 방법 ( 'dodged') (0) | 2021.02.19 |
파이썬 Pandas GroupBy 출력을 Series에서 DataFrame으로 변환 (0) | 2021.02.19 |
파이썬 Keep Alive를 사용하는 Python urllib2 (0) | 2021.02.19 |
댓글