어제 여러 가변 인자 관련 문제를 풀어보면서 사용법에 어느 정도 감이 잡힌 것 같다.
오늘은 재귀 함수와 람다 함수에 대해 배웠는데, 역시 개념적으로 복잡한 느낌이 들어 충분한 복습이 필요할 것 같다.
def recursive_func(n):
# 기본 조건
if n == 0:
return
print("재귀 호출", n)
recursive_func(n-1)
recursive_func(5)
# 재귀 호출 5
# 재귀 호출 4
# 재귀 호출 3
# 재귀 호출 2
# 재귀 호출 1
# 거듭 제곱
# 반복문으로 구현
def power_for(a, n):
result = 1
for i in range(n):
result *= a
return result
print(power_for(4, 3))
# 64
# 재퀴함수로 구현
def power_rec(a, n):
if n == 0:
return 1
return a * power_rec(a, n-1)
print(power_rec(4, 3))
# 64# 반복문으로 구현
def factorial_for(n):
result = 1
for i in range(1, n+1):
result *= i
return result
print(factorial_for(5))
# 120
# 재귀함수로 구현
def fact(n):
if n == 0 or n == 1:
return 1
return n * fact(n-1)
print(fact(5))
# 120# 반복문
def fibo_num(n):
if n < 0:
return 0
a, b = 0, 1
for _ in range(n-1):
a, b = b, a + b
return b
print(fibo_num(6))
# 8
# 재귀함수
def fibo_rec(n):
if n < 0:
return 0
elif n == 1:
return 1
return fibo_rec(n-1) + fibo_rec(n-2)
print(fibo_rec(6))
# 8 람다 함수 = 익명 함수
lambda 매개변수: 표현식# 일반 함수
def add(x, y):
return x + y
# 람다 함수
lambda x, y: x + y
add_func = lambda x, y: x + yadd_func(3, 5)(lambda x: x ** 2)(10)my_list = [1,2,3,4]
# 일반 함수를 사용
def square_func(x):
return x ** 2
list(map(square_func, my_list))
# [1, 4, 9, 16]
# 람다 함수를 사용
list(map(lambda x: x ** 2, my_list))
# [1, 4, 9, 16]
my_list2 = [1,2,3,4,5,6,7,8,9,10]
# 일반 함수를 사용
def is_even(x):
return x % 2 == 0
list(filter(is_even, my_list2))
# [2, 4, 6, 8, 10]
# 람다 함수를 사용
list(filter(lambda x: x % 2 == 0, my_list2))
# [2, 4, 6, 8, 10]
my_list3 = ["apple", "banana", "watermelon", "grape"]
sorted(my_list3, key=lambda word: len(word), reverse=True)
# ['watermelon', 'banana', 'apple', 'grape']
# 1. 특정 조건 만족하는 튜플만 추출
students = [("Alice", [80, 90]), ("Bob", [60, 65]), ("Charlie", [70, 70])]
list(filter(lambda s: sum(s[1]) / len(s[1]) >= 70, students))
# [('Alice', [80, 90]), ('Charlie', [70, 70])]
# 2. 키워드 추출 리스트 만들기
sentences = ["Python is fun", "Lambda functions are powerful", "Coding is creative"]
list(map(lambda word: word.split()[0], sentences))
# ['Python', 'Lambda', 'Coding']
# 3. 튜플 리스트를 정렬하기
people = [("Alice", 30), ("Bob", 25), ("Charlie", 35)]
sorted(people, key=lambda age: age[1])
# [('Bob', 25), ('Alice', 30), ('Charlie', 35)]
재귀 함수와 람다 함수에 대한 개념 정리를 우선으로 충분히 공부해봐야겠다. 재귀 함수는 작성 된 코드를 보면 직관적으로 느껴지는데, 막상 코드를 작성할때는 머릿속으로 이미지가 잘 그려지지 않아 많이 문제를 풀어봐야 할 것 같다.
람다 함수 또한 실무에서 상당히 많이 사용되기 때문에, 지금부터 기반을 잘 다져둬야 할 것 같다.