Python 3K에는 어떤 기능적 도구가 남아 있습니까?
-
08-07-2019 - |
문제
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]