본문 바로가기
개발공부/Python : 파이썬

파이썬 훑어보기 5 - 함수

by 개발자D 2024. 12. 17.

파이썬 훑어보기 5 - 함수

함수

같은 내용의 코드를 여러 번 적는 것은 비효율적이기 때문에 [함수]를 사용합니다. 함수를 사용하면 입력값에 따른 차이만을 가지는 일관적인 코드 재사용이 가능합니다.

 

함수 선언

파이썬에서 함수를 사용하려면 함수를 선언해야 합니다. 함수가 사용되었을 때 실행할 문장을 입력합니다. 이때 문장에서 매개변수를 사용할 수 있습니다.

 

def 함수명(매개변수1, 매개변수2, ...):
	실행할 문장
	return [return값]

 

매개변수는 함수 선언시 함수에서 사용할 입력값을 의미합니다. 함수를 사용할 때 소괄호(())안에 매개변수를 함께 전달합니다. 

함수가 끝날 때 함수를 사용한 쪽에 반환해야 하는 값이 있다면 return 키워드 입력 후 return값을 입력해 줍니다. 반환해야 하는 값이 없을 때는 생략이 가능합니다. 생략할 경우 함수 실행의 자료형은 None이 됩니다.

 

 함수 선언은 함수 사용보다 상위에 놓여야합니다.

 

함수 사용

함수명(인자1, 인자2, ...)

 

함수 선언시에는 입력값을 매개변수라고 부르지만, 함수를 사용할 때에 넣어주는 입력값은 인자라고 합니다. 인자는 실제 값을 갖습니다.

 

키워드 매개변수 : 함수 사용

함수명(매개변수명1=인자1, 매개변수명2=인자2)

 

함수를 사용할 때 매개변수명을 직접 입력해 주는 것입니다. 매개변수명=인자의 형태로 입력합니다. 이렇게 키워드 매개변수를 사용하면 매개변수 순서를 지키지 않아도 되고, 어떤 매개변수에 어떤 인자값이 들어가는지 확실하게 할 수 있습니다. 매개변수가 많아지거나, 가변 매개변수와 기본매개변수를 함께 사용할 때 도움이 됩니다.

 

가변 매개변수 : 함수 선언

매개변수는 일반적으로 사용할만큼 선언합니다. 하지만, 그 개수가 특정되지 않는 상황에서는 가변 매개변수를 사용할 수 있습니다.

 

def 함수명(매개변수, *가변매개변수):
	실행할 문장

 

가변 매개변수명 앞에 *를 붙여주면 가변 매개변수가 됩니다. 가변 매개변수의 자료형은 튜플(Tuple)입니다.

 

가변 매개변수는 일반 매개변수 뒤에 하나만 선언해야 합니다.

 

기본 매개변수 : 함수 선언

기본 값이 설정되어 있는 매개변수입니다. 인자를 받지 않아도 됩니다. 

def 함수명(매개변수, 기본매개변수=값):
	실행할 문장

 

기본매개변수명 = 값 형식으로 입력합니다.

 

  일반적으로 매개변수 중 가장 마지막에 선언합니다.

  가변 매개변수와 함께 사용할 때는 키워드 매개변수를 사용합니다.

 

global 키워드

함수 내부에서 함수 외부 변수의 스택에 있는 값을 교체하려고 할 때 사용합니다. 

number = 0

def method():
	global number
	number += 1

 

함수 내부에서 global 키워드를 붙여 선언한 후 사용합니다.

 

❓ 스택이란?

- 스택은 기본 자료형 변수의 값, 객체 자료형 변수의 주소값이 저장되는 메모리 공간을 의미합니다. 

 

람다 lambda

 

람다는 함수를 간결하게 선언하는 방법입니다. 함수도 함수의 매개변수로 사용될 수 있습니다. 이럴 때 람다를 사용하면 직관적이고 쉬운 코드를 만들 수 있습니다.

lambda 매개변수: 표현식

 

함수 앞에 lambda키워드를 붙이고, 사용할 매개변수: 표현식의 형태로 적으면 됩니다.  

 

❓ 표현식이란?
- 표현식은 결괏값을 반환하는 계산식을 의미합니다.

 

제너레이터

지난 글에서 제너레이터를 만들 수 있는 제너레이터 표현식에 대해 다뤘었는데요. 함수로도 제너레이터를 만들 수 있습니다.

제너레이터는 이터레이터를 만드는 방법 중 하나입니다. 이터레이터는 [반복할 수 있는 것]을 처리하기 위해 사용됩니다.

def generator_fun():
	yield "generator"

 

함수 내부에서 return 대신 yield 키워드를 사용합니다. yield는 함수 내에서 여러 번 사용할 수 있습니다.

 

일반적인 방법으로 제너레이터 함수를 실행하면 함수의 내용이 실행되지 않고 제너레이터 객체를 반환합니다. next() 메서드를 통해 함수 내부 코드를 실행할 수 있으며 첫 번째 yield 키워드까지 실행됩니다. 이후, next()를 호출할 때마다 다음 yield 키워드까지의 코드를 실행합니다.

def generator_fun():
	yield 1
	yield 2

gen = generator_fun()

print(next(gen)) # 1
print(next(gen)) # 2

 

함수 데코레이터

 

함수 실행 전후에 꾸며줄 내용을 추가하는 기능입니다. 다음과 같이 데코레이터 함수를 정의하고, 사용하고자 하는 함수 위에 @데코레이터함수명을 붙입니다.

 

예제

import time

# 데코레이터 함수
def timer(function):
    def wrapper():
        print("함수 실행을 시작합니다.")
        start_time = time.time()  # 시작 시간 기록
        function()  # 원래 함수 실행
        end_time = time.time()  # 종료 시간 기록
        print(f"함수 실행이 종료되었습니다. 실행 시간: {end_time - start_time:.2f}초")
    return wrapper

@timer
def long_running_task():
    print("작업을 시작합니다...")
    time.sleep(2)  # 2초 동안 쉬기 (작업이 오래 걸리는 것처럼 가정)
    print("작업이 끝났습니다!")

# 함수 실행
long_running_task()

# 함수 실행을 시작합니다.
# 작업을 시작합니다...
# 작업이 끝났습니다!
# 함수 실행이 종료되었습니다. 실행 시간: 2.00초