ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 람다식
    Engineering WIKI/Python 2022. 5. 25. 17:09
    • 메모리 절약, 가독성 향상, 코드 간결
    • lambda 매개변수들: 식
    • 람다표현식 (익명함수)
    lambdaAdd = lambda n, m: n + m
    print(lambdaAdd(2,3)) #5 
    print(lambdaAdd(4,5)) #9
    
    print((lambda n, m: n if n % 2 == 0 else m)(1, 3))
    #3
    print((lambda n, m: n if n % 2 == 0 else m)(2, 3))
    #2
    

    함수 vs 람다

    • 함수는 객체 생성 → 리소스(메모리) 할당
    • 람다는 즉시 실행(Heap 초기화) ⇒ 메모리 초기화
    def plus_ten(x):
    	return x + 10
    
    plus_ten(1) # 11
    
    plus_ten = lambda x: x + 10
    plus_ten(1)  # 11
    
    • (lambda 매개변수들: 식)(인수들)
    (lambda x: x + 10)(1) # 11
    

    람다 표현식 안에서는 변수를 만들 수 없다

    • 람다 표현식에서 주의할 점은 람다 표현식 안에서는 새 변수를 만들 수 없다는 점입니다. 따라서 반환값 부분은 변수 없이 식 한 줄로 표현할 수 있어야 합니다. 변수가 필요한 코드일 경우에는 def로 함수를 작성하는 것이 좋습니다.
    (lambda x: y = 10; x + y)(1)
    SyntaxError: invalid syntax
    
    • 단, 람다 표현식 바깥에 있는 변수는 사용할 수 있습니다. 다음은 매개변수 x와 람다 표현식 바깥에 있는 변수 y를 더해서 반환합니다.
    y = 10
    (lambda x: x + y)(1) # 11
    

    람다 표현식을 인수로 사용하기

    • 람다 표현식을 사용하는 이유는 함수의 인수 부분에서 간단하게 함수를 만들기 위해서 입니다. 이런 방식으로 사용하는 대표적인 예가 map입니다.
    • 람다 표현식을 사용하기 전에 먼저 def로 함수를 만들어서 map을 사용해보겠습니다. 다음과 같이 숫자를 받은 뒤 10을 더해서 반환하는 함수 plus_ten을 작성합니다. 그리고 map에 plus_ten 함수와 리스트 [1, 2, 3]을 넣습니다. 물론 map의 결과는 map 객체이므로 눈으로 확인할 수 있도록 list를 사용해서 리스트로 변환해줍니다.
    def plus_ten(x):
    		return x + 10
    
    list(map(plus_ten, [1, 2, 3]))  # [11, 12, 13]
    
    • plus_ten 함수는 매개변수 x에 10을 더해서 반환하므로 리스트 [1, 2, 3]이 [11, 12, 13]으로 바뀌었습니다. 지금까지 map을 사용할 때 map(str, [1, 2, 3])와 같이 자료형 int, float, str 등을 넣었죠? 사실 plus_ten처럼 함수를 직접 만들어서 넣어도 됩니다.
    list(map(lambda x: x + 10, [1, 2, 3])) # [11, 12, 13]
    
    new_list = map(lambda x: x * x,[1,2,3,4,5]) 
    list(new_list)  # [1, 4, 9, 16, 25] 
    

    'Engineering WIKI > Python' 카테고리의 다른 글

    Generator  (0) 2022.05.30
    일급함수  (1) 2022.05.30
    파이썬 2진수, 8진수, 10진수, 16진수 변환  (0) 2022.05.26
    추상클래스(abstract class)  (1) 2022.05.25
    파이썬 퀵 정렬  (0) 2022.05.25
    Python3 vs Pypy3  (0) 2022.05.25
    Python TDD  (0) 2022.05.23
    파이썬 상속 (Inheritance)  (0) 2022.05.23
Designed by Tistory.