Python
Python 문법 기초 19 - 일급함수와 람다함수
코딩탕탕
2022. 10. 22. 16:31
# 일급함수 : 함수안에 함수, 인자로 함수 전달, 반환값이 함수
def func1(a, b):
return a + b
func2 = func1
print(func1(3, 4))
print(func2(3, 4))
print()
def func3(func): # 가인수로 함수 수신 중(매개변수)
def func4():
print('나는 내부함수야~')
func4()
return func # 반환값이 함수
mbc = func3(func1) # 실인자로 함수(주소) 전달!(인자)
print(id(mbc))
print(id(func1))
print(mbc(3, 4))
<console>
7
7
나는 내부함수야~
1685379150032
1685379150032
7
람다함수
print('Lambda : 축약함수, 이름이 없는 한 줄 짜리 함수')
# 형식 : 'lambda 인자(여러개 사용가능) : 표현식' return 없이 결과를 반환
# def를 쓸 정도로 복잡하지 않거나, def를 적용할 수 없는 곳에 사용하면 효과적
def Hap(x, y):
return x + y
print(Hap(1, 2))
print((lambda x, y : x + y)(1, 2))
g = lambda x, y: x + y
print(g) # 람다도 함수이기때문에 주소를 출력하게 된다.
print(g(3,4))
<console>
Lambda : 축약함수, 이름이 없는 한 줄 짜리 함수
3
3
<function <lambda> at 0x0000018868EB6160>
7
간단한 함수를 축약해서 사용하기 위해 람다함수를 많이 사용한다.
kbs = lambda a, su= 10:a + su
print(kbs(5))
print(kbs(5, 6))
sbs = lambda a, *tu, **di:print(a, tu, di)
sbs(1,2,3,m=4,n=5)
<console>
15
11
1 (2, 3) {'m': 4, 'n': 5}
li = [lambda a, b : a + b, lambda a : a + 5]
print(li[0](3, 4))
print(li[1](3))
<console>
7
8
list 형식으로 인덱싱 해서 람다함수를 선택하여 적용시킬 수도 있다.
print('어떤 함수의 인자로 람다를 사용')
# filter(함수, 집합형자료)
print(list(filter(lambda a : a < 5, range(10))))
print(list(filter(lambda a : a % 2, range(10))))
# a % 2 의 값은 나머지가 0이 되기 때문에 false로 나와서 값은 true인 홀수만 나온다.
<console>
어떤 함수의 인자로 람다를 사용
[0, 1, 2, 3, 4]
[1, 3, 5, 7, 9]
list 타입으로 filter 함수를 호출 후 인자로 람다함수를 호출한다. 그럼 filter로 걸러진 값만 출력이된다.
문제 1) 1 ~ 100 사이의 정수 중 5의 배수이거나 7의 배수만 걸러서 출력
# 1 ~ 100 사이의 정수 중 5의 배수이거나 7의 배수만 걸러서 출력
print(list(filter(lambda a : a % 5 == 0 or a % 7 == 0, range(1, 101))))
for i in range(1, 101):
if i % 5 == 0 or i % 7 == 0:
print(i, end = ' ')
<console>
[5, 7, 10, 14, 15, 20, 21, 25, 28, 30, 35, 40, 42, 45, 49, 50, 55, 56, 60, 63, 65, 70, 75, 77, 80, 84, 85, 90, 91, 95, 98, 100]
5 7 10 14 15 20 21 25 28 30 35 40 42 45 49 50 55 56 60 63 65 70 75 77 80 84 85 90 91 95 98 100
람다 함수를 사용하여 list 타입으로 출력하는 모습을 볼 수 있다.