파이썬의 함수
이 글은 파이썬의 함수에 대해 설명합니다.
YouTube Video
파이썬의 함수
파이썬의 함수는 재사용 가능한 코드 블록을 정의하기 위해 필수적인 기능으로, 필요할 때 호출하여 프로그램을 조직적이고 단순화할 수 있도록 도와줍니다. 함수를 사용하면 코드의 가독성을 높이고 DRY 원칙(자신을 반복하지 말라, 같은 코드를 여러 번 작성하지 않기)을 따를 수 있습니다.
함수 정의하기
함수는 def
키워드를 사용하여 정의됩니다. 기본 문법은 다음과 같습니다:.
1def function_name(arg1, arg2, ..., argN):
2 """docstring (A brief description of the function)"""
3 processing
4 return return_value
예를 들어, 두 숫자를 더하는 함수를 정의하려면 다음과 같이 작성합니다:.
1def add(x, y):
2 """A function that adds two numbers and returns the result"""
3 return x + y
함수 호출하기
정의된 함수는 다음과 같이 호출 및 사용될 수 있습니다:.
1result = add(3, 4)
2print(result) # Output: 7
함수의 구성 요소
-
함수 이름: 함수를 호출할 때 사용되는 이름.
-
인자(매개변수): 호출 시 전달된 데이터를 받는 변수 이름. 여러분은 0개 이상의 인자를 정의할 수 있습니다.
-
문서화 문자열 (Docstring): 함수의 목적과 사용법을 설명하는 데 사용되는 문자열. 선택 사항.
-
함수 본문: 함수가 실행할 지시문들이 작성된 들여쓰기된 블록.
-
반환값:
return
문을 사용하여 호출자에게 반환되는 값.return
이 생략되면 기본적으로None
이 반환됩니다.
인자의 종류
파이썬에는 여러 종류의 인자가 있습니다.
- 위치 인자: 함수를 호출할 때 인자를 전달하는 표준적인 방법.
- 기본값 인자: 호출 시 생략할 수 있는 기본값이 있는 인자.
1def greet(name, message="Hello"):
2 print(f"{message}, {name}")
3
4greet("Alice") # "Hello, Alice"
5greet("Bob", "Good morning") # "Good morning, Bob"
- 가변 길이 인수:
*args
는 여러 위치 인수를 튜플로 받고,**kwargs
는 이를 딕셔너리로 받아들입니다.
1def func(*args, **kwargs):
2 print("args:", args)
3 print("kwargs:", kwargs)
4
5func(1, 2, 3, a=4, b=5)
6# Output:
7# args: (1, 2, 3)
8# kwargs: {'a': 4, 'b': 5}
함수를 올바르게 사용하면 Python 프로그램을 보다 효과적이고 효율적으로 작성할 수 있습니다.
Python에서의 람다 함수
Python에서는 lambda
함수를 사용하여 익명이고 간결한 함수를 정의합니다. 일반적인 def
키워드로 정의된 함수와 달리, lambda
는 짧고 한 줄로 된 함수를 생성할 수 있게 합니다. 여기에서는 Python의 lambda
함수에 대해 자세히 설명하겠습니다.
lambda
함수의 기본
lambda
함수는 이름에서 알 수 있듯이 이름이 없는 임시 함수를 정의하는 데 사용되며, 익명 함수라고도 불립니다. 기본 문법은 다음과 같습니다:.
1lambda arguments: expression
arguments
: 함수의 인수를 지정합니다. 여러 개의 인수는 쉼표로 구분하여 지정할 수 있습니다.expression
: 인수에 따라 계산되는 표현식입니다. 표현식의 결과는 함수의 반환값이 됩니다.
예를 들어, 아래의 코드는 두 숫자를 더하는 lambda
함수를 정의하고 실행합니다.
1add = lambda x, y: x + y
2print(add(5, 3)) # Output: 8
이 예제에서 lambda x, y: x + y
는 두 개의 인수 x
와 y
를 받아 합계를 반환하는 lambda
함수입니다.
lambda
함수의 사용 사례
lambda
함수는 간단한 함수를 즉석에서 정의해야 할 때 유용합니다. 특히 다음과 같은 경우에 자주 사용됩니다:.
-
함수에 인수로 전달될 때
- 짧고 임시적인 함수를 전달할 때 고차 함수(다른 함수를 인수로 받는 함수)에서 유용합니다.
-
리스트 정렬의 키를 지정할 때
sort()
또는sorted()
와 같은 함수에서 정렬 기준(키)을 지정할 때 유용합니다.
고차 함수에서의 예제 사용법
고차 함수의 대표적인 예로는 map()
, filter()
, reduce()
가 있습니다. 이 함수들은 다른 함수를 인수로 받아 리스트와 같은 시퀀스에 적용합니다.
1numbers = [1, 2, 3, 4, 5]
2squared = list(map(lambda x: x ** 2, numbers))
3print(squared) # Output: [1, 4, 9, 16, 25]
이 예제에서는 리스트의 각 숫자를 제곱하기 위해 lambda
함수가 map()
함수에 전달됩니다.
목록 정렬 사용 예
lambda
함수는 때로는 목록을 정렬할 때 사용자 정의 키를 지정하는 데 사용할 수 있습니다. 예를 들어, 다음 코드는 튜플의 두 번째 요소를 기준으로 목록을 정렬합니다.
1pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
2pairs.sort(key=lambda pair: pair[1])
3print(pairs)
4# Output: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
이 예에서는 lambda
함수를 사용하여 튜플을 그들의 두 번째 요소(문자열)를 기준으로 정렬합니다.
filter()
와 lambda
filter()
함수는 주어진 조건에 따라 목록(또는 다른 반복 가능한 객체)에서 요소를 필터링하는 데 사용됩니다.
1numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3print(even_numbers) # Output: [2, 4, 6, 8]
이 예제에서는 목록에서 짝수를 필터링하여 새 목록을 생성합니다.
lambda
와 reduce()
reduce()
함수는 목록을 단일 값으로 축소하는 데 사용됩니다. lambda
함수를 사용하여 쉽게 구현할 수 있습니다.
1from functools import reduce
2
3numbers = [1, 2, 3, 4, 5]
4product = reduce(lambda x, y: x * y, numbers)
5print(product) # Output: 120
이 예제에서는 목록의 모든 요소를 곱하여 결과를 생성합니다.
복잡한 lambda
함수 사용을 피하세요
lambda
함수는 간결하다는 장점이 있지만, 복잡한 로직을 구현하는 데 사용하면 읽기가 어려워집니다. 따라서 한 줄로 표현할 수 있는 간단한 작업에 사용하는 것이 적절합니다. 복잡한 작업의 경우 def
를 사용하여 함수를 정의하는 것이 더 읽기 쉽고 관리하기 쉽습니다.
예를 들어, 아래와 같은 복잡한 lambda
함수 사용은 피해야 합니다.
1# Complex and hard-to-read lambda function
2complex_func = lambda x, y: (x * 2 + y) if x > y else (x + y * 2)
이 경우, 아래와 같이 def
로 정의된 함수를 사용하는 것이 더 낫습니다.
1def complex_func(x, y):
2 if x > y:
3 return x * 2 + y
4 else:
5 return x + y * 2
결론
Python의 lambda
함수는 임시로 짧은 함수를 정의하는 데 편리한 도구입니다. 주로 고차 함수나 목록 작업에서 특정 조건을 간결하게 정의하는 데 사용됩니다. 그러나 lambda
함수는 간단한 작업에만 제한되어야 하며, 복잡한 로직의 경우 def
함수가 선호됩니다.
위의 기사를 보면서 Visual Studio Code를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.