ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 함수2 - 함수의 종류
    Python 2022. 3. 7. 12:08

    * 바로 쓰는 파이썬, 박진수, 서울대학교출판문화원

    함수가 간단할 줄 알았는데 간단하지 않아서 당황스럽...

     

     

      이번 포스트에서 다룰 내용은 함수의 종류입니다. 크게 1. 전역함수 & 지역함수, 2. 람다함수, 3. 메서드를 정리해보겠습니다. 

     

    1. 전역 함수(global function) & 지역 함수(local function)

      전역 함수는 일반 함수로 생각하면 됩니다. 같은 모듈(하나의 .py 파일 내부) 안에서는 어디서든 사용 가능합니다. 다른 모듈에서 전역 함수를 사용하려면 다른 모듈/라이브러리를 import하여 사용할 수 있습니다. 또한 당연히 파이썬 자체 내장 함수(i.e. print(), len())도 전역 함수이기에 어디서든 사용 가능합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def rectangle_area(height, width)
        return height * width
     
    rectangle_area(105# 50
     
     
    def triangle_area(base, height)
        return base * height * 0.5
     
    triangle_area(105# 25.0
    cs

     

      반면 지역 함수(=내재 함수)는 함수 안에서만 정의된 함수입니다. 따라서 해당 함수 안에서만 사용이 가능하고, 다른 함수 혹은 프로그램에서 호출해 사용할 수 없습니다. 때문에 지역 함수는 특정 함수 안에서 여러번의 작업을 수행하는 도우미 함수로 활용됩니다.  

    1
    2
    3
    4
    5
    6
    7
    8
    def display_stand(product):
        def display_num():
            import random
            return random.randint(1,99)
        print('{}: {}번 진열대에 배치하세요.'.format(product, display_num()))
     
    display_stand('연필')
    # 연필: 60번 진열대에 배치하세요.
    cs

    def display_stand... 밑에 def display_num... 이라는 함수가 하나 더 있습니다. 얘가 바로 지역 함수 입니다. 지역함수를 단독으로 사용하려고 하면 다음과 같은 NameError가 뜨므로, 지역 함수는 자기가 딸린 함수 안에서만 사용할 수 있음을 알 수 있습니다.

     

     

    2. 람다 함수(lambda function)

      람다 함수는 함수 사용 시점에 표현식 형태로 정의하여 바로 사용할 수 있는 함수입니다. 즉 def......의 과정 없이 바로 간결하게 함수 사용이 가능합니다. 람다 함수는 다음과 같이 표현되며 몇가지 제약 사항들이 있습니다.

    lambda parameter: 표현식

      1) 람다 함수는 매개변수(parameter)를 설정하면 일반적으로 위치 매개변수의 형태를 띕니다.

          또한 매개변수는 선택사항이며, 한 개 이상도 사용 가능합니다.

      2) 표현식은 계산한 값을 반환합니다. 

        - 다만 표현식에 return(yield)은 사용할 수 없습니다.

        - 조건문, 순환문도 사용할 수  없습니다. 그러나 간편 조건문은 사용 가능합니다.

        - 표현식이 튜플이면 표현식을 반드시 괄호 안에 넣어주어야 합니다. 

     

     

      람다 함수는 정의 후 변수에 저장해주어야 합니다. 이름이 없기 때문에 익명 함수(anonymous function)이라고도 합니다. 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def say_anything(anything):
        return print('안녕', anything)
     
    say_anything('파이썬'# 안녕 파이썬
     
     
    # 람다 함수화
    lambda anything: print('안녕', anything)
     
    # 변수에 저장하여 사용
    talk = lambda anything: print('안녕', anything)
    talk('파이썬'# 안녕 
    cs

    위와 같이 일반 함수를 람다 함수로 정의할 수 있으며, 람다 함수는 변수에 저장하여 사용하여야 합니다. 

     

      좀 더 복잡한 람다 함수의 예도 있습니다. 파일 하나면 file, 파일 두 개 이상이면 files가 출력되는 함수입니다.

    1
    2
    3
    4
    5
    6
    7
    8
    = lambda i: '' if i == 1 else 's'
    count = 1
    print('{} file{} proceed'.format(count, x(count)))
    # 1 file proceed
     
    count = 5
    print('{} file{} proceed'.format(count, x(count)))
    # 5 files proceed
    cs

    람다 함수 표현식은 i가 1일 경우는 아무것도 붙이지 않지만(''), 그게 아니라면 s를 붙이란 뜻입니다. 

     

      람다 함수의 매개변수에 여러개의 매개변수를 놓을 수도 있습니다. 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def rectangle_area(height, width)
        return height * width
     
    rectangle_area(105# 50
     
     
    lambda height, width: height * width
    rec = lambda height, width: height * width
     
    rec(105# 50
    cs

     

     

    3. 메서드(method)

      메서드는 클래스(class) 내부에 구현된 함수를 말합니다. 클래스와 관련이 있는 함수기 때문에 해당 클래스와 같이 사용해야 하며 '.'을 사용합니다. 문자열.format()으로 사용되는 format()이 대표적인 메서드입니다. 

    1
    2
    3
    4
    5
    class myclass:
        def say_anything(self):
            print('안녕'self)
     
    myclass.say_anything('파이썬'# 안녕 파이썬
    cs

    say_anything() 함수는 클래스 myclass에 속한 메서드이기 때문에 클래스/클래스의 인스턴스와 함께 호출해야 합니다. 클래스 인스턴스는 okt = Okt() 중 굵은 글씨를 말합니다. 아무튼 함께 호출하는 것은 '클래스.메서드'로 합니다.

    모든 메서드는 함수입니다. 그러나 기본적으로 메서드는 클래스 내의 함수이기 때문에, 모든 함수가 메서드가 되지는 않습니다. 

     

    'Python' 카테고리의 다른 글

    함수1- 함수 기초  (0) 2022.02.16
    사용자 정의 함수(def)  (0) 2021.11.25
    4. 자료형(data types)- 리스트(list)  (0) 2021.09.11
    3. 자료형(data types)- 숫자 numbers  (0) 2021.09.11
    2. Python의 함수(function)  (0) 2021.09.10

    댓글

Designed by Tistory.