[python] lambda 표현식 + 클로저

전상욱·2021년 4월 20일
0

Python

목록 보기
9/14
  • lambda 매개변수들 :식
ex = lambda x : x + 10
ex(1)
11
  • 변수 할당 하지 않고, 그냥 바로 호출 가능
    (lambda 매개변수들: 식)(인수들)
(lambda x: x + 10)(1)
11
  • 람다 표현식을 인수로 사용
def kkk(x):
	return x + 10
list(map(kkk, [1,2,3]))
[11,12,13]

list(map(lambda x : x + 10, [1,2,3]))
[11,12,13]
  • 람다 조건부 표현식
    lambda 매개변수들 : 식1 if 조건식 else 식2
    (if 조건부 확장가능 if ..else if..else if..else)
a = [1,2,3,4,5,6,7,8,9,10]
list(map(lambda x : str(x) if x % 2 ==0 else x , a))

filter and reduce with lambda

def f(x):
    return x > 5 and x <10 

a = [8,3,2,10]
result = list(filter(f, a))
print(result)
[8]
--------------------------
a = [8,3,2,10]
list(filter(lambda x : x > 5 and x < 10, a))
[8]
  • reduce
    reduce는 반복 가능한 객체의 각 요소를 지정된 함수로 처리한뒤 이전 결과와 누적해스 반환하는 함수.
    1) from functools import reduce
    2) reduce(함수, 반복가능한 객체)
from functools import reduce

def f(x, y):
    return x + y 

a = [1,2,3,4,5,6,7,8,9,10]
b = reduce(f, a)
print(b)

from functools import reduce
a = [1,2,3,4,5,6,7,8,9,10]
result = reduce(lambda x , y : x + y, a)
print(result)

클로저

사실 아직도 클로저를 정확하게 알고 있지 않지만.. 최대한 알려고 노력중이다.
활용해보고, 익혀야겠다.

클로저
일급 객체 함수의 개념을 이용하여, 스코프에 묶인 변수를 바인딩하기 위한 기술!
자 그럼 여기서 일급객체함수 라는것을 알아야 한다.

일급객체함수
우리가 일반적으로 사용하는 숫자, 문자열, 클래슬르 다루는 것처럼 함수도 다른 객체와 동일하게 사용가능하다는 말 (함수를 매개변수로 넘기고, 다른 변수에 대입하고 등등)

def cal():
    a = 3
    b = 5
    def mul_add(x):
        return a * x + b
    return mul_add # 함수 자체를 반환할때는 ()를 하지 않는다.

c = cal()
print(c(1),c(2))

8 11

잘 보면 calc 가 끝났는데도 c 는 calc의 지역변수 a,b 를 사용해서 계산하고 있다.
이렇게 함수를 둘러싼 환경등을 유지하다가, 함수를 호출할 때 다시 꺼내서 사용하는 함수
프로그램의 흐름을 변수에 저장할 수 있는 특징 즉, 클로저는 지역변수와 코드를 묶어서 사용하고 싶을때 활용!!( 주변 환경을 기억한다....!!!)

profile
someone's opinion of you does not have to become your reality

0개의 댓글