functools.partial
람다를 통과 할 수없는 기능은 무엇입니까 ?
추가 기능 측면에서는 그리 많지 않지만 (나중에 참조하십시오) – 가독성은 보는 사람의 눈에 있습니다.
함수형 프로그래밍 언어 (특히 리스프 / 계획 가족의 것)을 잘 알고있는 대부분의 사람들은 좋아 보인다 lambda
잘 - 나는 "가장", 확실히 말을 하지 모두 귀도 내가 확실히 ( "익숙"그 사이에 있기 때문에 등 ) 아직 lambda
파이썬에서 눈에 띄지 않는 이상으로 생각합니다 ...
그는 파이썬으로 그것을 받아 들인 것에 대해 회개했지만 "파이썬의 결함"중 하나로 파이썬 3에서 제거하려고 계획했습니다.
나는 그를 완전히지지했다. (I 사랑 lambda
제도에 ... 잠시 한계를 파이썬에서 , 그리고 이상한 방법은 그냥 아무튼 나머지 언어로 피부를 크롤링하십시오).
그리 그러나,의 무리에 대한 lambda
애호가 - 귀도 역 추적하고 떠나기로 결심 할 때까지, 지금까지 파이썬의 역사에서 볼 반란에 가장 가까운 것 중 하나 무대 lambda
.의
에 몇 가지 추가 functools
(함수는 상수, 정체성을 반환하게하는이, 등) (이상 중복 명시 적으로 피하기 위해 일어나지 않았다 lambda
'의 기능),하지만 partial
물론 남아의 그것은 전혀 없습니다 (한을 총 중복 않으며)는 눈에 거슬리는입니다.
기억 lambda
의 신체가로 제한된다 표현 은 한계를 가지고 있으므로. 예를 들어 ... :
>>> import functools
>>> f = functools.partial(int, base=2)
>>> f.args
()
>>> f.func
<type 'int'>
>>> f.keywords
{'base': 2}
>>>
functools.partial
의 반환 함수는 내부 검사에 유용한 속성, 즉 랩핑하는 함수, 그리고 어떤 위치 및 명명 된 인수로 수정되는지로 장식됩니다. 또한 명명 된 인수를 다시 무시할 수 있습니다 ( "고정"은 다소 기본 설정입니다).
>>> f('23', base=10)
23
보시다시피 , 그것은 간단 하지 않습니다 lambda s: int(s, base=2)
!-)
예, 당신은 할 수 당신이 몇 가지 제공하기 위해 람다를 곡해 - 키워드 - 오버 라이딩을 위해, 예를
>>> f = lambda s, **k: int(s, **dict({'base': 2}, **k))
하지만 사랑스러운 희망 도 가장 열렬한 것을 lambda
-lover은 고려하지 않습니다 이 댄 공포 더 읽기 partial
전화 -!). "속성 설정"부분은 파이썬의 "본문은 단일 표현"제한으로 인해 더욱 어려워집니다 lambda
(그리고 할당은 절대로 파이썬 표현식의 일부가 될 수 없다는 사실). 디자인 한계를 넘어서 목록 이해력을 확장함으로써 ... :
>>> f = [f for f in (lambda f: int(s, base=2),)
if setattr(f, 'keywords', {'base': 2}) is None][0]
이제 하나의 표현으로 명명 된 인수 overridability 플러스 세 가지 속성의 설정을, 결합, 그리고 얼마나 읽을 말해 그 ... 될 것입니다!
functools.partial
언급 한 기능이 람다보다 우수 하다고 말하고 싶습니다 . 아마도 이것은 다른 게시물의 주제 일지 모르지만, 디자인 수준에서 당신을 너무 귀찮게하는 것은lambda
무엇입니까?