콘텐츠로 건너뛰기

파이썬 리턴 값 사용 방법

[

파이썬 return 문: 사용법과 최상의 방법

return 문을 효과적으로 사용하는 것은 Python 코드를 작성하는 데 필요한 핵심 기술이며, Pythonic하고 견고한 사용자 정의 함수를 작성할 수 있습니다.

이 튜토리얼에서는 다음 내용을 배웁니다:

  • 함수에서 Python return을 사용하는 방법
  • 함수에서 단일 값 또는 다중 값을 반환하는 방법
  • return 문을 사용할 때 권장 사항

퀴즈 풀기: 상호작용형 “파이썬 return 문” 퀴즈로 지식을 테스트해 보세요. 완료하면 학습 진도를 추적할 수 있는 점수를 받게 됩니다.

퀴즈 풀기 »

파이썬 함수에 대한 시작하기

대부분의 프로그래밍 언어에서는 계산 작업을 수행하는 코드 블록에 이름을 지을 수 있습니다. 이러한 이름이 지정된 코드 블록은 코드의 여러 장소에서 이름을 사용하여 호출할 수 있으므로 빠르게 재사용할 수 있습니다.

프로그래머들은 이러한 이름이 지정된 코드 블록을 서브루틴, 루틴, 프로시저, 또는 함수라고 부르는데, 이는 사용하는 언어에 따라 다를 수 있습니다.

예를 들어, add() 함수는 두 개의 숫자를 입력으로 받아서 더한 결과를 반환하는 함수입니다.

def add(num1, num2):
sum = num1 + num2
return sum

위의 코드에서 return 문은 함수에서 계산된 결과를 반환하는 역할을 합니다. return 문 다음의 sum 변수는 함수의 반환 값입니다. 따라서 이 함수를 호출하고 결과를 사용하고자 하는 다른 코드에서는 다음과 같이 사용할 수 있습니다:

total = add(5, 3)
print(total) # Output: 8

add() 함수의 반환 값은 total 변수에 할당되고, print() 함수를 사용하여 화면에 출력됩니다. 이를 통해 return 문을 사용하여 함수의 결과 값을 얻을 수 있습니다.

파이썬 return 문 이해하기

파이썬에서 return 문은 함수의 실행을 중지하고 호출된 코드로 반환합니다. 이러한 return 문은 함수의 어느 위치에서든 사용할 수 있으며, 해당 위치에서 함수가 종료됩니다. 함수가 모든 return 문을 실행하지 않은 경우에는 자동으로 None 값을 반환합니다.

파이썬에서는 두 가지 유형의 return 문이 있습니다:

명시적 return

명시적 return 문은 함수의 실행을 중지하고 호출된 코드로 지정된 값을 반환하는 데 사용됩니다. 이 값은 함수를 호출하는 코드에 의해 사용될 수 있으며, 반환 값으로 사용됩니다.

예를 들어, 다음 함수는 인수로 받은 숫자를 2로 나눈 결과를 반환합니다:

def divide_by_two(num):
result = num / 2
return result

이 함수는 divide_by_two(8)을 호출하면 4.0이라는 결과를 반환합니다. 이 반환 값은 다른 변수에 할당하거나 다른 연산에 사용할 수 있습니다.

암시적 return

암시적 return 문은 함수 실행 중인 부분에서 반환 값이 없거나 return 문을 명시적으로 사용하지 않을 경우 자동으로 실행됩니다. 이때 함수는 None 값을 반환합니다.

예를 들어, 다음 함수는 입력된 문자열의 길이를 출력합니다. 함수에서 반환 값이 없기 때문에 암시적 return 문으로 None 값을 반환합니다.

def print_length(string):
length = len(string)
print(f"The length of the string is {length}.")
print_length("Hello") # Output: The length of the string is 5.

print_length() 함수는 문자열의 길이를 출력하는 것이 목적이므로 반환 값이 필요하지 않습니다. 따라서 return 문을 사용하지 않고 함수를 작성할 수 있습니다.

반환 vs 출력

파이썬에서 반환과 출력은 다릅니다. return 문은 함수 실행 중에 호출하는 코드로 값을 반환하고, print() 문은 값을 화면에 표시하기 위해 사용됩니다.

함수에서 return 문을 사용하면 해당 함수를 호출한 변수에 결과 값을 할당할 수 있습니다. 반환 값은 추가로 다른 연산에 사용할 수 있습니다.

반면, print() 문은 함수 내에서 결과 값을 화면에 출력하는 데 사용됩니다. 이는 주로 디버깅이나 사용자에게 결과를 표시하는 데 사용됩니다.

간단한 예로, add() 함수를 다시 살펴보겠습니다:

def add(num1, num2):
sum = num1 + num2
return sum

이 함수에서는 return 문이 사용되었으며, add(5, 3)을 호출한 결과는 8이라는 값이 됩니다. 이 값을 다른 변수에 할당하여 다른 연산에 사용할 수 있습니다.

result = add(5, 3)
print(result) # Output: 8

반면에 print_length() 함수는 반환 값이 없으며 print() 문을 사용하여 결과를 화면에 표시합니다. 이 함수를 호출하면 문자열의 길이가 출력됩니다.

print_length("Hello") # Output: The length of the string is 5.

따라서 return 문은 호출한 코드로 값을 반환하는 데 사용되고, print() 문은 결과를 화면에 표시하는 데 사용됩니다.

여러 개의 값 반환

파이썬은 한 번에 여러 개의 값을 반환할 수 있습니다. 함수에서 return 문은 쉼표로 구분된 여러 값으로 이루어진 튜플을 반환합니다. 호출한 코드에서는 반환된 튜플 값을 각각 다른 변수에 할당하여 사용할 수 있습니다.

예를 들어, 다음 함수는 두 개의 숫자를 받아서 더한 결과와 곱한 결과를 반환합니다:

def add_and_multiply(num1, num2):
sum = num1 + num2
product = num1 * num2
return sum, product

이 함수를 호출하면 두 개의 값이 포함된 튜플이 반환됩니다. 이러한 반환 값을 각각 다른 변수에 할당하여 따로 사용할 수 있습니다.

result = add_and_multiply(2, 3)
print(result) # Output: (5, 6)

result 변수는 (5, 6) 튜플을 가리키므로, 해당 튜플을 인덱싱하여 개별 값에 접근할 수 있습니다.

sum_result = result[0]
product_result = result[1]
print(sum_result) # Output: 5
print(product_result) # Output: 6

보다시피 return 문을 사용하여 여러 개의 값을 반환할 수 있습니다. 이를 통해 함수에서 곱셈 또는 덧셈과 같은 다양한 결과를 한 번에 반환할 수 있습니다.

파이썬 return 문 사용: 최상의 방법

return 문을 사용할 때는 몇 가지 권장 사항을 따르는 것이 좋습니다. 이러한 사항은 함수의 가독성, 유지 관리성 및 신뢰성을 향상시키는 데 도움이 됩니다.

명시적으로 None 반환하기

사용자 정의 함수가 항상 값을 반환한다고 보장할 수 없을 때, 함수 내에서 return None과 같이 None 값을 명시적으로 반환하는 것이 좋습니다. 이는 호출한 코드에서 함수의 반환 값이 None인지 확인할 수 있도록 합니다. 반환 값이 None인 경우에는 해당 함수가 값을 반환하지 않았음을 알 수 있습니다.

반환 값을 기억하기

함수의 반환 값은 호출하는 코드에서 필요하거나 계산에 사용될 수 있습니다. 따라서 호출한 코드에서 반환 값을 변수에 할당하는 것이 좋습니다. 이렇게 하면 반환 값이 실수로 없어지지 않고 계속해서 사용할 수 있습니다.

복잡한 표현식 피하기

함수를 작성할 때 반환 값을 계산하고 반환하기 전에 변수에 할당하는 것이 좋습니다. 이렇게 하면 반환 문에서 복잡한 표현식을 사용하지 않고도 코드를 읽고 이해하기 쉽게 만들 수 있습니다.

전역 변수 수정 대신 반환 값 사용하기

전역 변수를 함수 내에서 수정하는 것은 좋은 방법이 아닙니다. 대신 반환 값을 사용하여 호출한 코드로 값을 전달하는 것이 좋습니다. 전역 변수를 수정하면 코드의 의도나 기능을 파악하기 어려워지고, 코드 일관성과 유지 관리성이 감소할 수 있습니다.

조건문과 함께 return 사용하기

return 문은 조건문과 함께 사용하여 특정 조건에 따라 다른 값을 반환하는 데 유용합니다. if 문을 사용하여 조건에 따라 값을 반환하고, 필요한 경우 else 문도 함께 사용할 수 있습니다.

예를 들어, 다음 함수는 입력된 숫자가 짝수인 경우 Even 문자열을 반환하고 홀수인 경우 Odd 문자열을 반환합니다:

def check_even_odd(num):
if num % 2 == 0:
return "Even"
else:
return "Odd"

이 함수를 호출하면 입력된 숫자에 따라 Even 또는 Odd 문자열이 반환됩니다.

result = check_even_odd(6)
print(result) # Output: Even

따라서 return 문을 사용하여 조건에 따라 다른 값을 반환할 수 있습니다.

True 또는 False 반환하기

파이썬에서는 조건이 참인 경우 True, 거짓인 경우 False 값을 반환하는 것이 관례입니다. 이를 활용하여 True 또는 False 값을 반환하는 함수를 작성할 수 있습니다.

예를 들어, 다음 함수는 문자열이 비어 있는지 여부를 확인하여 True 또는 False 값을 반환합니다:

def is_string_empty(string):
if len(string) == 0:
return True
else:
return False

이 함수를 호출하면 입력된 문자열이 비어 있는지 여부에 따라 True 또는 False 값이 반환됩니다.

result = is_string_empty("")
print(result) # Output: True

따라서 return 문을 사용하여 조건에 따라 True 또는 False 값을 반환할 수 있습니다.

반복문 단축하기

return 문은 반복문 안에서 조건을 만족할 경우 함수의 실행을 중지하고 호출한 코드로 즉시 반환할 수 있습니다. 이러한 기능을 활용하여 사용자 정의 함수에서 반복문을 단축시킬 수 있습니다.

예를 들어, 다음 함수는 입력된 리스트에서 최소값을 찾아 반환합니다:

def find_minimum(numbers):
minimum = float("inf")
for num in numbers:
if num < minimum:
minimum = num
else:
return minimum
return minimum

이 함수를 호출하면 입력된 리스트에서 가장 작은 값을 찾아 반환합니다.

result = find_minimum([10, 5, 2, 7])
print(result) # Output: 2

따라서 return 문을 사용하여 조건을 만족하면 함수의 실행을 중지하고 호출한 코드로 즉시 반환할 수 있습니다. 이렇게 함으로써 불필요한 반복을 피할 수 있습니다.

죽은 코드 식별하기

죽은 코드란 함수에서 실행되지 않는 코드를 말합니다. 함수에서 return 문을 사용하여 코드 실행을 중지하는 경우, return 문 이후의 코드는 실행되지 않으며 죽은 코드가 됩니다.

함수에 죽은 코드가 있는지 확인하려면 return 문 이후에 추가적인 코드가 있는지 주의깊게 살펴보아야 합니다. 때로는 이러한 죽은 코드를 제거하여 함수의 가독성과 유지 관리성을 향상시킬 수 있습니다.

여러 개의 이름 있는 객체 반환하기

파이썬에서는 한 번에 여러 개의 객체를 반환할 수 있으며, 이러한 개체에 이름을 지정하여 반환할 수도 있습니다. 이를 통해 함수에서 여러 가지 결과를 한 번에 읽을 수 있는 구조를 만들 수 있습니다.

예를 들어, 다음 함수는 이름과 나이를 입력 받아서 Person 클래스의 객체를 반환합니다:

class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def create_person(name, age):
person = Person(name, age)
return person.name, person.age

이 함수를 호출하면 이름과 나이에 해당하는 객체가 튜플로 반환됩니다.

result = create_person("Alice", 25)
print(result) # Output: ("Alice", 25)

이를 통해 함수에서 여러 개의 이름 있는 객체를 한 번에 반환할 수 있습니다.

함수 반환: 클로저

파이썬에서는 함수가 다른 함수를 반환할 수 있습니다. 이를 클로저라고 합니다. 클로저는 반환된 함수와 그 환경을 캡슐화합니다.

예를 들어, 다음 함수는 내부에서 정의된 함수를 반환합니다:

def outer_function(b):
def inner_function(a):
return a + b
return inner_function
closure = outer_function(5)
result = closure(10)
print(result) # Output: 15

outer_function() 함수는 inner_function() 함수를 반환합니다. 이때 inner_function() 함수는 outer_function() 함수 내에서 정의되었으며, outer_function() 함수의 환경을 캡슐화하여 반환됩니다.

클로저를 사용하면 함수의 실행을 저장하거나 필요할 때 가져갈 수 있는 유용한 기능을 구현할 수 있습니다. 이를 통해 함수의 일부 동작을 재사용하거나 조건에 따라 다른 동작을 수행할 수 있습니다.

함수 가져오기와 반환: 데코레이터

파이썬에서는 함수를 가져오고 다른 함수를 반환하는 것이 가능합니다. 이를 통해 데코레이터를 구현할 수 있습니다. 데코레이터는 다른 함수를 수정하거나 확장할 수 있는 유용한 도구입니다.

예를 들어, 다음 코드는 @decorator 문법을 사용하여 함수를 수정하는 데코레이터를 구현한 예입니다:

def decorator(func):
def wrapper():
print("Before function execution")
func()
print("After function execution")
return wrapper
@decorator
def hello():
print("Hello, world!")
hello()
# Output:
# Before function execution
# Hello, world!
# After function execution

이 예제에서 decorator 함수는 인수로 받은 함수를 수정하는 새로운 함수인 wrapper를 반환합니다. hello 함수에 @decorator를 사용하여 함수를 수정하도록 지정하였습니다. 따라서 hello() 함수를 호출하면 decorator 함수가 적용된 수정된 함수가 실행됩니다.

데코레이터를 사용하면 함수의 동작을 수정하거나 확장할 수 있으므로, 기존 함수를 변경하지 않고도 코드의 유지 관리성을 높일 수 있습니다.

사용자 정의 객체 반환: 팩토리 패턴

파이썬에서는 사용자 정의 객체를 반환하여 팩토리 패턴을 구현할 수 있습니다. 팩토리 패턴은 객체를 생성하는 자체적인 객체입니다. 보통 팩토리 객체는 여러 종류의 객체를 생성하며, 이를 통해 객체 생성 로직을 캡슐화할 수 있습니다.

예를 들어, 다음 코드는 create_car 함수가 Car 클래스의 객체를 반환하는 팩토리 패턴을 보여줍니다:

class Car:
def __init__(self, make, model):
self.make = make
self.model = model
def create_car(make, model):
car = Car(make, model)
return car
result = create_car("Toyota", "Corolla")
print(result.make) # Output: Toyota
print(result.model) # Output: Corolla

create_car 함수를 호출하면 ToyotaCorolla에 해당하는 Car 객체를 반환합니다. 이를 통해 객체 생성 로직을 함수로 캡슐화할 수 있습니다.

try ... finally 블록에서 return 사용하기

파이썬에서 try ... finally 블록을 사용하면 finally 블록의 코드가 실행된 후 함수가 종료됩니다. finally 블록에서 return 문을 사용하면 finally 블록의 코드가 실행된 후 지정된 값을 반환합니다.

예를 들어, 다음 코드는 finally 블록에서 return 문을 사용하는 함수를 보여줍니다:

def divide(num1, num2):
try:
result = num1 / num2
return result
finally:
print("Finally block executed")
return -1
output = divide(10, 2)
print(output) # Output: -1

divide 함수를 호출하면 finally 블록의 코드가 실행된 다음 -1이라는 결과가 반환됩니다. 이를 통해 finally 블록에서 함수의 반환 값을 원하는 값으로 설정할 수 있습니다.

제너레이터 함수에서 return 사용하기

파이썬에서는 제너레이터 함수에서 return 문을 사용하여 특정 값을 반환하고 실행을 중지할 수 있습니다. return 문은 제너레이터 함수가 값을 생성하는 데 사용되는 yield 문 이외의 다른 방법으로 실행을 중지하는 데 사용됩니다.

예를 들어, 다음 코드는 제너레이터 함수에서 return 문을 사용하는 예입니다:

def count_up_to(number):
for i in range(1, number + 1):
yield i
if i == 5:
return
output = count_up_to(10)
for num in output:
print(num)

이 예제에서 count_up_to 함수는 입력된 숫자까지 숫자를 생성하는 제너레이터 함수입니다. yield 문을 사용하여 각 숫자를 반환하면서 실행을 일시 중단합니다. 그러나 i 값이 5 일 때 return 문이 실행되어 함께 반환되고 제너레이터 함수의 실행이 중지됩니다.

따라서 return 문을 사용하여 제너레이터 함수에서 특정 값을 반환하고 실행을 중지할 수 있습니다.

결론

파이썬에서 return 문을 사용하여 함수의 실행을 중지하고 호출한 코드로 값을 반환할 수 있습니다. 이를 통해 함수가 계산된 결과를 반환하고 호출한 코드에서 이를 사용할 수 있습니다.

return 문을 효과적으로 사용하기 위해서는 return 문을 사용하는 방법, 함수에서 단일 또는 다중 값 반환의 방법, 그리고 return 문을 사용할 때 권장 사항을 알아야 합니다. 이를 통해 좀 더 읽기 쉽고 유지 관리하기 쉬운 함수를 작성할 수 있습니다.

파이썬 함수에 대한 이해를 바탕으로 return 문을 효과적으로 활용하여 코드를 작성해 보세요. 이를 통해 높은 생산성과 품질을 갖춘 프로그램을 개발할 수 있습니다.