일급객체
변수나 데이터에 할당 가능, 인자로 넘기기 가능, 리턴값으로 리턴하기 가능하다.
변수에 할당 할 수 있어야 한다.
객체의 인자로 넘길 수 있어야 한다.
객체의 리턴값으로 리턴 할수 있어야 한다.
일급 함수
함수가 다른 일급 객체와 동일하게 다루어 질때, 일급 함수라고 지칭한다
함수를 다른 변수와 동일하게 다루는 언어는 일급 함수를 가졌다고 표현한다.
예를 들어, 일급 함수를 가진 언어에서는 함수를 다른 함수에 매개변수로 제공하거나, 함수가 함수를 반환할 수 있으며, 변수에도 할당할 수 있다.
자바스크립트와 파이썬의 함수는 일급함수로 분류된다.
람다함수 lamda
lambda는 함수를 생성할 때 사용하는 예약어 def와 동일한 역할을 한다.
보통 함수를 한줄로 간결하게 만들 때 사용한다.
함수의 기본적인 형태
def func1(a, b):
return a + b
func2 = func1
print(func1(3, 4))
print(func2(3, 4))
7
7
일급함수
인자로 함수의 주소만 전달한다.
예시에서 func3코드를 봐도 그렇고 print(id(func1)), print(id(mbc))의 결과가 같은 것을 보고도 알 수 있듯이 mbc, 즉 func3(func1)은 func1을 리턴한다.
그렇기 때문에 print(mbc(3, 4))는 func1(3, 4)와 동일하고 7을 리턴하게 된다.
def func3(func): # 가인수로 함수 수신
def func4():
print('내부함수')
func4()
return func # 반환값이 함수
#인자로 함수 주소만 전달한다.
mbc = func3(func1) # 실인수로 함수 전달
print(id(func1))
print(id(mbc))
print(mbc(3, 4))
내부함수
2342434566496
2342434566496
7
Lambda
축약함수, 이름이 없는 한 줄 짜리 함수
함수의 기본적인 형태
def abc(x,y):
return x + y
print(abc(1, 2))
3
람다함수의 기본적인 형태
print((lambda x, y:x + y)(1, 2))
3
람다함수를 변수에 담아서 사용하는 형태
g = lambda x, y:x + y
print(g)
print(g(3, 4))
<function <lambda> at 0x000002216476E4C0>
7
람다함수에 초기값을 지정하고 사용하는 형태
kbs = lambda a, su=10:a + su
print(kbs(5))
print(kbs(5, 6))
15
11
람다함수에 가변인수를 사용하는 형태
가변인수의 학습이 부족하다면 이전 게시글을 참고하면 좋다
https://bonoitlog.tistory.com/274?category=1051614
sbs = lambda a, *tu, **di:print(a, tu, di)
sbs(1,2,3,m=4,n=5)
1 (2, 3) {'m': 4, 'n': 5}
람다함수를 리스트 자료형에 담아 사용하는 형태
print()
li = [lambda a, b:a + b, lambda a:a + 5]
print(li[0](3, 4))
print(li[1](3))
7
8
람다함수를 인자로 사용하는 형태, filter 함수 사용
filter 함수의 학습이 부족하다면 해당 게시글을 참고하면 좋다
2022.10.09 - [python/python] - 파이썬 내장함수 - map, filter
# filter(함수, 집합형자료)
print(list(filter(lambda a: a < 5, range(10))))
print(list(filter(lambda a: a % 2, range(10))))
[0, 1, 2, 3, 4]
[1, 3, 5, 7, 9]
람다함수 인자 사용 예시
1 ~ 100 사이의 정수 중 5의 배수이거나 7의 배수만 걸러서 출력
print(list(filter(lambda a: a % 5 == 0 or a % 7 == 0, range(1, 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]
'python' 카테고리의 다른 글
재귀함수(Recursive function), factorial (0) | 2022.10.06 |
---|---|
함수 장식자 decorator (0) | 2022.10.06 |
클로저(closure) (0) | 2022.10.06 |
매개변수와 인자 , 가변인수 (0) | 2022.10.06 |
function - global, nonlocal (0) | 2022.10.05 |