📖 UNIT 32. 람다표현식
람다표현식 어렵다... 정말 어렵다....................
def plus_ten(x): return x+10
이 함수가 있다. 그냥 간단하게 주어진 값에 10만큼 더해서 return해준다.
이걸 람다 표현식으로 쓸 수 있다. 람다표현식은 함수는 아니고 이름이 없는 함수라고 생각하면 된다.
lambda x: x + 10
먼저 이게 람다표현식으로 plus_ten 함수를 표현한 것이다. 람다표현식은 자기 자신만으로 사용되지는 못한다.
plus_ten = lambda x: x + 10
plus_ten(1)
이렇게 사용이 된다. 람다표현식 내부에서 변수선언은 못하지만, 람다 표현식 바깥에 있는 변수는 사용할 수 있다.
plus_ten을 이용하는 것이 아니라 람다표현식 자체로 함수처럼 쓸 수도 있기는 하다.
(lambda x: x + 10)(1)
위와 같이 해주면 된다.
list(map(lambda x: x + 10, [1, 2, 3]))
이렇게 람다표현식을 인수로 사용하는 것도 가능하다.
필터도 사용해보자. filter는 특정 조건에 맞는 요소를 가져오는 것이다.
먼저 f(x)를 선언하자.
def f(x): return x > 5 and x < 10
그리고
a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
list(filter(f, a))
이렇게 코드를 짜주면 참인 요소만 출력이 된다.
📒reduce 사용하기
reduce함수는 functools 모듈에 속해있다.
def f(x, y): return x + y
a = [1, 2, 3, 4, 5]
from functools import reduce
reduce(f, a)
이런 코드는 결국 1+2+3+4+5를 실행하게 된다.
📖 UNIT 33. 클로저 사용하기
코딩을 하다보면 전역변수의 값을 지역 함수에서 변경할 경우도 생긴다. 포인터? 를 이용해도 되겠지만, 클로저를 사용해면 매우 편해진다.
x = 10
def foo():
global x
x = 20
print(x)
foo()
print(x)
이렇게 되면 10이 두번 출력된다.
함수안에 함수가 있을 때는 nonlocal을 사용하면 된다. 이 경우 가장 가까운 지역변수를 찾아서 값이 들어가지게 된다.
근데 이거 왜인지 잘못사용하면 코드가 다 꼬일 것 같다.
본격적으로 클로저에 대해 알아보자.
def calc():
a = 3
b = 5
def mul_add(x):
return a * x + b
return mul_add
c = calc()
print(c(1), c(2), c(3), c(4), c(5))
이런 코드가 있다. 먼저 결과는
8, 11, 14, 17, 20 순으로 출력이 된다.
그냥 스스로 공부를 해보자. 왜이지 홈페이지의 내용을 읽어보니 쉽게 느껴지고 건성건성 공부할 것 같다.
return mul_add 부분까지를 파이썬에 입력해보자. 이후 c = calc()를 해주자.
대충 의미를 해석해보자면 c에는 mul_add 함수가 들어가진 것이다.
그래서 c(1) c(2) ... 같은 명령은 mul_add(1), mul_add(2)와 같은 값들을 의미하는 것이다.
'스터디 그룹 > ProjectH4C' 카테고리의 다른 글
ProjectH4C 1개월 3,4주 과제 (코드업 1~10) (0) | 2021.02.02 |
---|---|
ProjectH4C 1개월 2주차 과제 (UNIT 34, 35, 36, 37) (0) | 2021.01.31 |
ProjectH4C 1개월 2주차 과제 (UNIT 29,30,31) 여기도 스택프레임이. (0) | 2021.01.31 |
ProjectH4C 1개월 2주차 과제 (UNIT 27, 28) (0) | 2021.01.29 |
ProjectH4C 1개월 2주차 과제 (UNIT 25, 26) (0) | 2021.01.28 |