Python/2.7 information

python lambda function

qkqhxla1 2016. 2. 8. 16:34

나머지는 더 필요하면 찾아보고 좋은 블로그를 발견해서 그냥 쓰임새, 이렇게도 쓰일 수 있다 등만 간단히 정리. 항상 새로운거 볼때마다 생각의 폭이 넓어지는 느낌이 든다.


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

생활코딩.