재귀함수 / 중첩함수 / 람다함수 / 내장함수


재귀함수 (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]
    

Categories:

python