반응형
Function (함수)
함수는 재사용 가능한 코드 블록으로, 코드의 가독성과 유지보수성을 높여줍니다. 함수를 사용하면 코드의 중복을 줄이고, 모듈화된 코드를 작성할 수 있으며, 복잡한 시스템을 구성하는 기본 단위를 제공합니다.
- 함수 정의: def 키워드를 사용하여 함수를 정의합니다.
- 함수 호출: 함수 이름과 괄호를 사용하여 함수를 호출합니다.
함수 정의
- 함수는 def 키워드를 사용하여 정의합니다. 함수 이름 뒤에 괄호를 쓰고, 괄호 안에는 함수가 받을 수 있는 매개변수(인수)를 정의할 수 있습니다. 함수의 본문은 들여쓰기로 구분됩니다.
- 기본 형태
def 함수이름(매개변수1, 매개변수2, ...):
# 함수 본문
return 반환값
- Example
def greet(name):
return f"Hello, {name}!"
# 함수 호출
print(greet("Alice")) # Output: Hello, Alice!
함수 호출
함수를 호출할 때는 함수 이름과 괄호를 사용합니다. 괄호 안에는 함수가 필요로 하는 인수를 전달할 수 있습니다.
- 기본 형태
함수이름(인수1, 인수2, ...)
- 예시
def add(a, b):
return a + b
result = add(3, 5)
print(result) # Output: 8
함수의 장점
- 재사용성: 한 번 정의된 함수는 여러 번 호출하여 사용할 수 있습니다. 이는 코드의 중복을 줄이고, 개발 시간을 단축시킵니다.
def square(x):
return x * x
print(square(2)) # Output: 4
print(square(3)) # Output: 9
- 모듈화: 함수는 복잡한 문제를 작은 단위로 나누어 해결할 수 있게 해줍니다. 각 함수는 특정 작업을 수행하도록 설계될 수 있습니다.
def add(a, b):
return a + b
def multiply(a, b):
return a * b
result = add(3, 5)
print(multiply(result, 2)) # Output: 16
- 가독성: 함수를 사용하면 코드가 더 구조화되고 이해하기 쉬워집니다. 함수 이름과 매개변수 이름을 통해 코드의 목적을 명확히 할 수 있습니다.
def calculate_area(radius):
pi = 3.14159
return pi * radius * radius
print(calculate_area(5)) # Output: 78.53975
- 유지보수성: 함수를 사용하면 코드의 특정 부분을 쉽게 수정할 수 있습니다. 함수의 내부 구현을 변경해도 함수 호출부는 수정할 필요가 없습니다.
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # Output: Hello, Alice!
# 함수 수정
def greet(name):
return f"Hi, {name}!"
print(greet("Alice")) # Output: Hi, Alice!
Lambda Function (람다 함수)
람다 함수는 한 줄로 작성 가능한 익명 함수로, 간단한 연산이나 데이터 변환에 유용합니다. 'lambda' 키워드를 사용하여 정의합니다.
- 람다 함수는 lambda 키워드를 사용하여 정의되며, lambda 매개변수: 반환값의 형태를 가집니다.
- 람다 함수는 함수 이름 없이 정의되기 때문에 익명 함수라고도 불립니다.
- 기본 형태
lambda 매개변수1, 매개변수2, ... : 반환값
- Example
add = lambda a, b: a + b
print(add(3, 5)) # Output: 8
람다 함수의 필요성
- 코드 간결화: 람다 함수는 짧고 간단한 연산을 수행할 때 코드의 가독성을 높여주고, 코드의 길이를 줄여줍니다.
# 정규 함수
def add(a, b):
return a + b
print(add(3, 5)) # Output: 8
# 람다 함수
add = lambda a, b: a + b
print(add(3, 5)) # Output: 8
- 일회성 함수가 필요한 경우: 일회성으로 사용될 간단한 함수를 정의할 때 유용합니다. 주로 map(), filter(), sorted()와 같은 함수와 함께 사용됩니다.
numbers = [1, 2, 3, 4, 5]
# map()과 람다 함수 사용
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # Output: [1, 4, 9, 16, 25]
# filter()와 람다 함수 사용
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Output: [2, 4]
# sorted()와 람다 함수 사용
points = [(1, 2), (3, 1), (5, 4), (2, 3)]
sorted_points = sorted(points, key=lambda point: point[1])
print(sorted_points) # Output: [(3, 1), (1, 2), (2, 3), (5, 4)]
람다 함수 사용 예시
- 리스트 요소의 제곱 계산
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # Output: [1, 4, 9, 16, 25]
- 리스트에서 짝수만 필터링
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Output: [2, 4]
- 튜플 리스트의 특정 요소를 기준으로 정렬
points = [(1, 2), (3, 1), (5, 4), (2, 3)]
sorted_points = sorted(points, key=lambda point: point[1])
print(sorted_points) # Output: [(3, 1), (1, 2), (2, 3), (5, 4)]
- 문자열 리스트의 길이를 기준으로 정렬
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=lambda word: len(word))
print(sorted_words) # Output: ['date', 'apple', 'banana', 'cherry']
가변 인자 및 키워드 가변 인자
가변 인자 (*args)
- *args는 여러 개의 인자를 함수에 전달할 때 사용됩니다.
- 함수 정의 시 매개변수 앞에 *를 붙여서 사용하며, 전달된 인자들은 튜플 형태로 함수 내부에 전달됩니다.
def my_function(*args):
for arg in args:
print(arg)
my_function(1, 2, 3) # Output: 1 2 3
키워드 가변 인자 (**kwargs)
- **kwargs는 키워드 인자를 함수에 전달할 때 사용됩니다.
- 함수 정의 시 매개변수 앞에 **를 붙여서 사용하며, 전달된 인자들은 딕셔너리 형태로 함수 내부에 전달됩니다.
def my_function(**kwargs):
for key, value in kwargs.items():
print(f"{key} = {value}")
my_function(name="Alice", age=30) # Output: name = Alice age = 30
왜 매개변수를 명시하지 않고 가변 인자를 사용할까요?
- 가변 인자를 사용하면 함수가 고정된 수의 인자만 받을 필요가 없게 되어, 더 유연한 함수 설계가 가능합니다.
- 다양한 수의 인자를 받아야 하는 상황에서 매우 유용합니다.
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3)) # Output: 6
print(sum_all(1, 2, 3, 4, 5)) # Output: 15
다양한 함수 호출 패턴을 지원
- 가변 인자와 키워드 가변 인자는 다양한 형태의 인자 전달 방식을 지원하여, 함수 호출 패턴을 다양하게 할 수 있습니다.
- 이는 특히 함수 오버로딩을 구현하는 데 유용합니다.
def greet(*args, **kwargs):
for arg in args:
print(f"Hello, {arg}")
for key, value in kwargs.items():
print(f"{key} = {value}")
greet("Alice", "Bob", age=25, location="New York")
# Output:
# Hello, Alice
# Hello, Bob
# age = 25
# location = New York
Function Programming (함수형 프로그래밍)
함수형 프로그래밍은 함수를 일급 객체로 사용하여 코드를 구성하고, 상태 변화와 부작용을 최소화하는 프로그래밍 방법입니다.
- 이는 프로그램의 각 부분을 함수로 나누고, 이러한 함수를 결합하여 문제를 해결합니다. 함수형 프로그래밍의 주요 특징 중 하나는 고차 함수의 사용입니다.
- 일급 객체로서의 함수: 함수는 변수에 할당되거나 다른 함수의 인자로 전달될 수 있으며, 함수에서 반환될 수도 있습니다.
고차 함수
- 고차 함수는 하나 이상의 함수를 인자로 받거나, 함수를 반환하는 함수입니다.
- Python에서 자주 사용되는 고차 함수로는 map, filter, reduce가 있습니다.
map 함수
- map 함수는 모든 요소에 함수를 적용하여 새로운 리스트를 반환합니다.
- 사용법
map(function, iterable)
- Example
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # Output: [1, 4, 9, 16, 25]
Filter 함수
- filter 함수는 조건에 맞는 요소만 걸러내어 새로운 리스트를 반환합니다.
- 사용법
filter(function, iterable)
- Example
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Output: [2, 4]
Reduce 함수
- reduce 함수는 모든 요소를 누적하여 단일 값을 반환합니다. 이는 functools 모듈에서 제공됩니다.
- 사용법
from functools import reduce
reduce(function, iterable)
- Example
from functools import reduce
numbers = [1, 2, 3, 4, 5]
total = reduce(lambda x, y: x + y, numbers)
print(total) # Output: 15
Function Programming (함수형 프로그래밍)의 장점
코드 간결성
- 함수형 프로그래밍은 코드의 중복을 줄이고, 더 간결하고 읽기 쉬운 코드를 작성할 수 있게 합니다.
numbers = [1, 2, 3, 4, 5]
# 함수형 프로그래밍을 사용한 예시
squared = list(map(lambda x: x ** 2, numbers))
상태 변화 최소화
- 함수형 프로그래밍은 상태 변화와 부작용을 최소화하여 코드의 예측 가능성과 안정성을 높입니다.
# 순수 함수의 예시
def add(a, b):
return a + b
result = add(3, 5) # 항상 같은 입력에 대해 같은 출력을 반환
대규모 데이터 처리에 유용
- 함수형 프로그래밍은 대규모 데이터 처리에 유용하며, 실무에서 데이터 파이프라인을 구축할 때 자주 사용됩니다.
data = range(1, 1000000)
filtered_data = list(filter(lambda x: x % 2 == 0, data))
transformed_data = list(map(lambda x: x ** 2, filtered_data))
반응형
'⌨️ Python' 카테고리의 다른 글
[Python] Database - 데이터베이스 (0) | 2024.07.15 |
---|---|
[Python] 파일 입출력 (0) | 2024.07.15 |
[Python] Generator, Iterator, Yield (제너레이터, 이터레이터, Yield) (0) | 2024.07.15 |
[Python] Class & OOP (클래스 & 객체지향 프로그래밍) (0) | 2024.07.14 |
[Python] Python - 변수와 자료형, 연산, 조건, 반복문 (0) | 2024.07.14 |