재귀함수 / 중첩함수 / 람다함수 / 내장함수
재귀함수 (Recursive Function)
- 자기 스스로를 호출하는 함수
def func(count):
if count>0:
print(count, 'first')
func(count-1)
print(count, 'second')
func(5)
### 출력결과
### 5 first
### 4 first
### 3 first
### 2 first
### 1 first
### 0 second
### 1 second
### 2 second
### 3 second
### 4 second
### 5 second
-
재귀 호출의 단계가 깊어질수록 메모리 추가 사용 > 종료조건을 분명히 해야 함
-
최대 재귀 깊이 초과 시 stack overflow > RecursionError 발생
중첩함수 (Nested Function)
- 함수 안에 정의된 함수
def func1(a):
def func2():
nonlocal a
a = a+1
return a
return func2()
print(func1(3))
### 출력결과
### 4
global / local / nonlocal variable
-
global : 전역변수, 함수 외부에서 만든 변수, 프로그램이 실행되어 있는 동안 계속 살아있음
-
local : 지역변수, 함수 안에서 변수 생성 시 함수 안에서만 살아있다가 함수 코드 실행 종료 시 변수도 같이 사라짐
-
nonlocal : 중첩함수에서 한단계 위 변수와 바인딩
a = 1
def test():
print(a + 1)
test()
### 출력 > 2
a = 1
def test():
a = 3
print(a + 1)
test()
### 출력 > 4
람다(lambda)함수
-
람다 표현식은 이름이 없는 함수 생성 > 람다표현식 = 익명함수(anonymous function)라고 부르기도 함
-
lambda 매개변수들:반환할내용
-
인수 생략 가능
lambda x: x + 10
# => 실행 시 <function <lambda> at 0x0000012F2FC7D1F0> 함수 객체 출력
def test(x, y):
print(x(y))
# 함수의 인수로 함수 사용 가능
test(lambda y : y+1, 5)
# x에 람다, y에 5 대입
### 출력결과 > 6
-
람다로 만든 익명 함수 호출하기
-
람다를 변수에 할당
plus_ten = lambda x: x + 10 print(plus_ten(5)) ### 출력결과 > 15
-
변수에 할당하지 않고 람다 표현식 호출하기
- (lambda 매개변수들:반환할내용)(인수들)
print((lambda x: x + 10)(5)) ### 출력결과 > 15
-
내장함수
- 따로 정의하지 않아도 파이썬에 기본적으로 정의되어 있는 함수들 ex) len(), print(), str(), int(), …
-
abs()
: 절댓값 반환 -
max()
/min()
: 최댓값/최솟값 반환 -
sorted()
: 매개변수 정렬 후 결과 반환 -
type()
: 자료형 반환 -
round(x, n)
: x를 n번째 자리수까지 반올림하여 반환- n 입력하지 않으면 정수 반환
print(round(5.1, 1)) print(round(5.158, 2)) print(round(5.1)) ### 출력결과 ### 5.1 ### 5.16 ### 5
-
pow(x, y)
: x의 y 제곱 -
enumerate()
-
반복문에 인덱스가 필요할 때 사용
-
인덱스번호와 컬렉션(list, tuple, dictionary, set)의 원소를 튜플 형태로 반환
t = [1, 2, 3] for i in enumerate(t): print(i) ### 출력결과 ### (0, 1) ### (1, 2) ### (2, 3) for i, v in enumerate(t): print('index : {}, value : {}'.format(i, v)) ### 출력결과 ### index : 0, value : 1 ### index : 1, value : 2 ### index : 2, value : 3
-
-
zip(리스트1, 리스트2) : 두 개의 리스트를 합쳐 각 리스트 원소의 쌍을 원소로 가지는 하나의 리스트를 반환
list1 = [1, 2, 3] list2 = [3, 4, 5] print(list(zip(list1, list2))) ### 출력결과 ### [(1, 3), (2, 4), (3, 5)]
-
map(함수, 컬렉션) : 함수와 컬렉션을 매개변수로 받아 컬렉션의 모든 데이터를 함수의 매개변수로 대입, 결과 리턴
print(list(map(lambda x: x+1, [1, 2, 3]))) ### 출력결과 ### [2, 3, 4]
-
filter(함수, 컬렉션) : 함수와 컬렉션을 매개변수로 받아 컬렉션의 모든 데이터를 함수의 매개변수로 대입, 결과가 참인 컬렉션의 멤버를 반환
print(list(filter(lambda x: x%2==0, [1, 2, 3, 4]))) # x%2==0일 때 참 ### 출력결과 ### [2, 4]