나머지는 더 필요하면 찾아보고 좋은 블로그를 발견해서 그냥 쓰임새, 이렇게도 쓰일 수 있다 등만 간단히 정리. 항상 새로운거 볼때마다 생각의 폭이 넓어지는 느낌이 든다.
1. 일반적인 람다함수. 인자가 2개인 경우.
a = lambda x,y:(x+3)*y print a(3,2)
2. 디폴트 매개변수 사용 가능
a = lambda x=4,y=3:x*y print a()
3. 다른 함수의 이름을 받아서 호출 가능.
a = lambda a,b,c:a(b,c) def x(y,z): return y+z print a(x,2,3)
4. 아래 출처의 블로그 분이 보통 이렇게 사용한다고 함.
def a(b,c,d): return b(c,d) print a(lambda x,y:x+y,3,4)
5. 가변 인자. 별개 다된다... 아래의 *arg나 **arg에 대한 설명은 http://qkqhxla1.tistory.com/295 참고
a = lambda x,*arg : x + arg print a((1,2,3),4,5,6,7)
6. 사전 만들기 와우.
a = lambda **arg:arg print a(b=3,c=4)
7. 함수에서 람다함수를 리턴하는걸 만들어서 함수생성기? 같은걸 만들수 있다.
def make_incrementor(n): return lambda x: x + n f = make_incrementor(42) print f(2)
8. 자바스크립트였나? 거기서의 람다함수 형태인데 아래처럼 쓸 수도 있다.
print (lambda x: x*2)(3)
9. 조건문은 파이썬에서의 삼항연산자로 대체할 수 있다.
a = lambda x: 'big' if x > 100 else 'small' print a(101)
지나가다 본 코드인데 소수 짜는 코드. 생각의 범위를 넓혀 주는 종류의 코드.
nums = range(2, 50) for i in range(2, 8): nums = filter(lambda x: x == i or x % i, nums) print nums
예전에 글을 썼는데 reduce, map, filter등과 어울려서 사용된다고 한다. http://qkqhxla1.tistory.com/302
생코에서 본 소스.
무슨 소스일까?? 아래 소스만 보고 추측해보자. 설명은 아래에 따로 적어놓음.
# -*- encoding: cp949 -*- print (lambda x: "\n".join(" " * (x - i) + "*" * (i * 2 - 1) for i in range(x, 0, -1)))(int(raw_input("Enter an integer: ")))
돌려봤겠지만 역으로 삼각형을 추출하는 소스이다. 가벼운 분석.
1. lambda 함수를 ()로 감싸고 뒤에 ()가 더 있다. 이건 앞에 함수를 정의하고 뒤의값을 인자로 실행한다는 소리이다. 위의 8번 참고.
2. 뒤의 인자는 입력받는 부분이고 int함수로 정수를 입력받는다는걸 알수있다. 앞의 인자를 보기쉽게 풀어보면
for i in range(x, 0, -1): print " " * (x - i) + "*" * (i * 2 - 1)
3. 가 된다. '\n'.join이 한줄씩 내리는 역할을 한다. 그리고 이제 대충 감을 잡았겠지만 공백을 x-i만큼 출력하고 *를 i*2-1만큼 출력한다.
소스 짠 분이 되게 코딩 잘하는 분이긴 한데.. 처음부터 짤때 저렇게 ()시작해서 짰는지 아니면 for문으로 짠 후 변경했는지는 본인만 아는 문제다.
쨌든 나에겐 식견을 넓혀주는 소스코드중 하나가 되었다.
참고.
http://thrillfighter.tistory.com/356
https://docs.python.org/2/tutorial/controlflow.html
생활코딩.
'Python > 2.7 information' 카테고리의 다른 글
raw 소켓 파악하기 1. (0) | 2016.03.07 |
---|---|
파이썬 내부구조 이해하기. 2.x (0) | 2016.02.27 |
gotoxy, 콘솔 창 색깔 변화 colorama모듈. (0) | 2015.12.29 |
지도 모듈 (구글맵, folium 등등.) (0) | 2015.12.24 |
Hello world 난독화하기.(번역) (1) | 2015.11.28 |