이것은 파이썬에서 골프를하기위한 팁 질문입니다.
파이썬 골프에서는 제출이 람다로 정의 된 함수 인 것이 일반적입니다. 예를 들어
f=lambda x:0**x or x*f(x-1)
람다 형식에는 두 가지 큰 장점이 있습니다 .
- 의 보일러
f=lambda x:...
또는lambda x:...
댄 짧은def f(x):...return...
또는x=input()...print...
- 적은 바이트 오버 헤드로 루프를 재귀 호출을 사용할 수 있습니다.
그러나 람다는 하나의 표현 만 허용하고 문장은 허용하지 않는다는 큰 단점이 있습니다. 특히 이것은와 같은 과제가 없음을 의미합니다 c=chr(x+65)
. 값이 두 번 (또는 그 이상) 참조되어야하는 긴 표현식이있는 경우 문제가됩니다.
할당은 같은 E=enumerate
기능을 외부 또는 선택적 인수로 가능하지만, 함수 입력에 의존하지 않는 경우에만 가능합니다. 정의시 평가시 f=lambda n,k=min(n,0):...
입력 n
이 정의되지 않았기 때문에 실패 와 같은 선택적 인수 k
입니다.
결과는 때로는 램다에서 긴 표현을 반복해서 빨아 들일 수 있습니다.
lambda s:s.strip()+s.strip()[::-1]
def f(s):t=s.strip();print t+t[::-1]
중단 짝수 지점은 약 11 자 ( 세부 사항 )이며, 이전으로 def
또는로 전환합니다 program
. 반복 표현을 위해 이것을 길이 5의 일반적인 손익 분기점과 비교하십시오.
range(a)+range(b)
r=range;r(a)+r(b)
print s[1:],s[1:]*2
r=s[1:];print r,r*2
다른 언어에는 해결 방법 이 있습니다 (예 : Octave) . 파이썬에는 알려진 속임수가 있지만 길고, 어색하고, 사용이 제한적입니다. 람다에서 할당을 시뮬레이션하는 짧고 범용적인 방법은 파이썬 골프에 혁명을 가져올 것입니다.
파이썬 골퍼가이 한계를 극복하거나 해결하는 방법은 무엇입니까? 람다에서 긴 표현이 두 번 반복되는 것을 볼 때 어떤 잠재적 아이디어를 염두에 두어야합니까?
이 팁 질문에 대한 나의 목표는이 문제에 대해 깊이 탐구하고
- 람다 내부의 가짜 할당을위한 골프 해결 방법 카탈로그 및 분석
- 더 나은 방법을위한 새로운 리드 탐색
각 답변은 해결 방법 또는 잠재 고객을 설명해야합니다.
lambda s:(s+s[::-1]).lower()
. 물론 이것은 실제 질문에 대답하지 않습니다.
strip
.