문제

MAP 및 Reduce를 포함하여 향후 파이썬에서 여러 기능적 기능을 삭제하는 것과 관련하여 여러 항목을 읽었습니다.

기능 확장에 관한 공식 정책은 무엇입니까?
Lambda 기능이 유지됩니까?

도움이 되었습니까?

해결책

Python 3.0과 3.1이 이미 출시되었으므로 직접 확인할 수 있습니다. 최종 결과는지도와 필터가 내장 된 상태로 유지되었으며 람다도 유지되었다. 유일한 변화는 감소가 funcTools 모듈로 이동했다는 것입니다. 당신은 그냥해야합니다

from functools import reduce

그것을 사용합니다.

미래의 3.x 릴리스는 이와 관련하여 3.0과 3.1과 거꾸로 양합 할 것으로 예상 될 수 있습니다.

다른 팁

Python 3.X에서 Python은 다음과 같은 풍부한 기능적 도구 세트를 계속 가지고 있습니다. any() 그리고 all() 가능한 한 단락 평가가 있습니다.

Python의 "생명을위한 자비로운 독재자" map() 목록 이해력으로 그 효과를 사소하게 재현 할 수 있기 때문입니다.

lst2 = map(foo, lst)

lst3 = [foo(x) for x in lst]

lst2 == lst3  # evaluates True

파이썬 lambda 기능은 제거되거나 이름이 바뀌지 않았으며 결코 그렇지 않을 것입니다. 그러나 그것은 결코 더 강력 해지지 않을 것입니다. 파이썬 lambda 단일 표현으로 제한됩니다. 문을 포함 할 수 없으며 여러 줄의 파이썬 코드를 포함 할 수 없습니다.

파이썬의 평범한 표준 def 기능 객체를 정의하며 lambda 물체. 당신이 실제로 그렇게하고 싶다면 함수 이름을 정의 한 후에도 기능의 이름을 해제 할 수도 있습니다.

예시:

# NOT LEGAL PYTHON
lst2 = map(lambda x: if foo(x): x**2; else: x, lst)

# perfectly legal Python
def lambda_function(x):
    if foo(x):
        return x**2
    else:
        return x

lst2 = map(lambda_function, lst)

del(lambda_function) # can unbind the name if you wish

실제로 "Ternary Operator"를 lambda 따라서 위의 예는 약간 고안되었습니다.

lst2 = map(lambda x: x**2 if foo(x) else x, lst)

그러나 일부 다중 기능은 lambda 간단한 일반 멀티 린 함수로 더 잘 처리됩니다.

Python 3.x는 기능적 힘을 잃지 않았습니다. 목록 이해력과 발전기 표현식이 바람직하다는 일반적인 느낌이 있습니다. map(); 특히, 발전기 표현식은 때때로 동등한 것을 수행하는 데 사용될 수 있습니다. map() 그러나 목록을 할당 한 다음 다시 자유롭게합니다. 예를 들어:

total = sum(map(lst, foo))

total2 = sum(foo(x) for x in lst)

assert total == total2  # same result

Python 2.x에서 map() 새로운 목록을 할당하며,이 목록은 합산되고 즉시 해방됩니다. 생성기 표현식은 한 번에 하나씩 값을 가져오고 전체 값 목록의 메모리를 결코 연결하지 않습니다.

Python 3.x에서 map() "게으른"이므로 둘 다 거의 똑같이 효율적입니다. 그러나 결과적으로 Python 3.x에서 Ternary Lambda 예는 목록으로 확장해야합니다.

lst2 = list(map(lambda x: x**2 if foo(x) else x, lst))

목록 이해력을 작성하는 것이 더 쉽습니다!

lst2 = [x**2 if foo(x) else x for x in lst]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top