-
함수2 - 함수의 종류Python 2022. 3. 7. 12:08
* 바로 쓰는 파이썬, 박진수, 서울대학교출판문화원
함수가 간단할 줄 알았는데 간단하지 않아서 당황스럽...이번 포스트에서 다룰 내용은 함수의 종류입니다. 크게 1. 전역함수 & 지역함수, 2. 람다함수, 3. 메서드를 정리해보겠습니다.
1. 전역 함수(global function) & 지역 함수(local function)
전역 함수는 일반 함수로 생각하면 됩니다. 같은 모듈(하나의 .py 파일 내부) 안에서는 어디서든 사용 가능합니다. 다른 모듈에서 전역 함수를 사용하려면 다른 모듈/라이브러리를 import하여 사용할 수 있습니다. 또한 당연히 파이썬 자체 내장 함수(i.e. print(), len())도 전역 함수이기에 어디서든 사용 가능합니다.
12345678910def rectangle_area(height, width)return height * widthrectangle_area(10, 5) # 50def triangle_area(base, height)return base * height * 0.5triangle_area(10, 5) # 25.0cs 반면 지역 함수(=내재 함수)는 함수 안에서만 정의된 함수입니다. 따라서 해당 함수 안에서만 사용이 가능하고, 다른 함수 혹은 프로그램에서 호출해 사용할 수 없습니다. 때문에 지역 함수는 특정 함수 안에서 여러번의 작업을 수행하는 도우미 함수로 활용됩니다.
12345678def display_stand(product):def display_num():import randomreturn 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)이라고도 합니다.
123456789101112def say_anything(anything):return print('안녕', anything)say_anything('파이썬') # 안녕 파이썬# 람다 함수화lambda anything: print('안녕', anything)# 변수에 저장하여 사용talk = lambda anything: print('안녕', anything)talk('파이썬') # 안녕cs 위와 같이 일반 함수를 람다 함수로 정의할 수 있으며, 람다 함수는 변수에 저장하여 사용하여야 합니다.
좀 더 복잡한 람다 함수의 예도 있습니다. 파일 하나면 file, 파일 두 개 이상이면 files가 출력되는 함수입니다.
12345678x = lambda i: '' if i == 1 else 's'count = 1print('{} file{} proceed'.format(count, x(count)))# 1 file proceedcount = 5print('{} file{} proceed'.format(count, x(count)))# 5 files proceedcs 람다 함수 표현식은 i가 1일 경우는 아무것도 붙이지 않지만(''), 그게 아니라면 s를 붙이란 뜻입니다.
람다 함수의 매개변수에 여러개의 매개변수를 놓을 수도 있습니다.
12345678910def rectangle_area(height, width)return height * widthrectangle_area(10, 5) # 50lambda height, width: height * widthrec = lambda height, width: height * widthrec(10, 5) # 50cs 3. 메서드(method)
메서드는 클래스(class) 내부에 구현된 함수를 말합니다. 클래스와 관련이 있는 함수기 때문에 해당 클래스와 같이 사용해야 하며 '.'을 사용합니다. 문자열.format()으로 사용되는 format()이 대표적인 메서드입니다.
12345class 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