[Python 기초]

[Python] Function(함수) 정리

dyk98 2024. 11. 26. 20:36

함수란?

  • 재사용 가능한 코드 블록 으로, 반복작업이나 프로그램이 복잡하거나, 테스트가 필요하거나 다른 개발자와 협업시 사용합니다.
  • 함수는 특정 작업을 수행하도록 정의된 코드 블록으로, 재사용 가능성을 높이고, 코드의 가독성과 유지보수성을 향상시킴.
  • Python에서 함수는 def 키워드를 사용하여 정의.
def greet(name):
    return f"안녕하세요, {name}님!"

message = greet("Alice")
print(message)  # 출력: 안녕하세요, Alice님!

함수의 구성

매개변수 (Parameters)

  • 함수가 입력값(인수)을 받을 때 사용하는 변수.
  • 여러 개의 매개변수를 사용할 수 있으며, 각 매개변수는 콤마(,)로 구분함.
def add(a, b):
    return a + b

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

## Multi parameters
def multiply(x, y, z):
    return x * y * z

print(multiply(2, 3, 4))  # 출력: 24

반환값 (Return Value)

  • 함수가 작업을 완료한 후 결과를 반환할 때 사용됨.
  • 반환값은 return 키워드를 사용해 지정함.
# 단일 반환
def square(n):
    return n * n

print(square(5))  # 출력: 25

# 복수 반환
def calculate(a, b):
    sum_value = a + b
    diff_value = a - b
    return sum_value, diff_value

sum_result, diff_result = calculate(10, 5)
print(sum_result)  # 출력: 15
print(diff_result)  # 출력: 5

# 반환값 없는 함수
def say_hello():
    print("Hello!")

result = say_hello()
print(result)  # 출력: None

기본값 (Default Parameter)

  • 매개변수에 기본값을 지정하여, 함수 호출 시 해당 인수를 생략할 수 있습니다.
def greet(name="손님"):
    return f"안녕하세요, {name}님!"

print(greet())  # 출력: 안녕하세요, 손님님!
print(greet("Alice"))  # 출력: 안녕하세요, Alice님!

## Multi default
def order(item, quantity=1, price=1000):
    return f"{item} {quantity}개 주문하셨습니다. 총 가격은 {quantity * price}원입니다."

print(order("사과"))  # 출력: 사과 1개 주문하셨습니다. 총 가격은 1000원입니다.
print(order("바나나", 2))  # 출력: 바나나 2개 주문하셨습니다. 총 가격은 2000원입니다.
print(order("딸기", 3, 1500))  # 출력: 딸기 3개 주문하셨습니다. 총 가격은 4500원입니다.

가변 매개변수 (Variable-Length Arguments)

1) args

  • 위치 인수를 튜플 형태로 전달.
  • 입력 인수의 개수가 정해지지 않은 경우 사용.

2) *kwargs

  • 키워드 인수를 딕셔너리 형태로 전달.
# *args 
def add(*args):
    return sum(args)

print(add(1, 2, 3))  # 출력: 6
print(add(10, 20, 30, 40))  # 출력: 100

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")
# **kwargs
print_info(name="Alice", age=30, city="Seoul")
# 출력:
# name: Alice
# age: 30
# city: Seoul

# *args & **kwargs
def mix_parameters(a, b, *args, **kwargs):
    print(f"a: {a}, b: {b}")
    print("args:", args)
    print("kwargs:", kwargs)

mix_parameters(1, 2, 3, 4, 5, key1="value1", key2="value2")
# 출력:
# a: 1, b: 2
# args: (3, 4, 5)
# kwargs: {'key1': 'value1', 'key2': 'value2'}

함수 사용 시 주의사항

  1. 함수의 역할을 분명히 하기:
    • 하나의 함수는 하나의 작업만 수행하도록 설계.
  2. 매개변수 순서에 주의:
    • 기본값이 있는 매개변수는 항상 기본값이 없는 매개변수 뒤에 위치해야 함.
  3. 반환값 처리:
    • 반환값을 적절히 처리하고, 반환값이 없는 경우 함수의 동작을 명확히 이해해야 함.
  4. 가변 매개변수 남용 주의:
    • args와 *kwargs는 유용하지만, 지나치게 사용하면 코드 가독성이 떨어질 수 있다.


함수의 종류

  • 사용자 정의 함수:
    • 사용자가 필요에 따라 정의하는 함수.
  • 내장 함수:
    • Python이 기본적으로 제공하는 함수.
    • 예: print(), len(), sum(), sorted()
  • 익명 함수 (Lambda 함수):
    • 이름이 없는 간단한 함수를 정의할 때 사용.
square = lambda x: x**2
print(square(5))  # 출력: 25
  • 재귀 함수(Recursive)
    • 함수 내부에서 자기 자신을 호출하는 함수.
def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n - 1)

Python 내장 함수란?

정의

  • 내장 함수는 Python에서 기본적으로 제공하며, 별도의 정의나 모듈 임포트 없이 바로 사용할 수 있는 함수.
  • 데이터 변환, 수학 연산, 문자열 처리 등 다양한 작업을 손쉽게 수행할 수 있도록 설계됨.

내장 함수 예시

print() 데이터를 콘솔에 출력.
input() 사용자로부터 입력받음.
len() 데이터의 길이(요소 개수) 반환.
type() 데이터 타입 반환.
int(), float(), str() 데이터 타입 변환.
sum() 숫자 데이터의 합계 반환.
min(), max() 최솟값과 최댓값 반환.
sorted() 데이터 정렬 후 새로운 리스트 반환.
abs() 숫자의 절댓값 반환.
round() 숫자를 지정된 자릿수까지 반올림.

 

2. 자주 사용하는 내장 함수

1) 출력과 입력

  • print(): 데이터를 출력.
print("Hello, World!")  # 출력: Hello, World!
print("Python", "is", "fun", sep="-")  # 출력: Python-is-fun
  • input(): 사용자로부터 입력받기.
name = input("이름을 입력하세요: ")
print(f"안녕하세요, {name}님!")

2) 데이터 정보 확인

  • len(): 데이터의 길이(요소 개수)를 반환.
fruits = ["apple", "banana", "cherry"]
print(len(fruits))  # 출력: 3
text = "Hello"
print(len(text))  # 출력: 5
  • type(): 데이터 타입을 반환.
a = 10
b = 3.14
c = "Python"
print(type(a))  # 출력: <class 'int'>
print(type(b))  # 출력: <class 'float'>
print(type(c))  # 출력: <class 'str'>

데이터 변환

  • int(), float(), str(): 데이터를 각각 정수, 실수, 문자열로 변환
num_str = "100"
num_int = int(num_str)
print(num_int)  # 출력: 100

num_float = float("3.14")
print(num_float)  # 출력: 3.14

num = 50
print(str(num))  # 출력: "50"

 

4) 수학 연산

  • sum(): 숫자 리스트나 튜플의 합계를 계산.
numbers = [1, 2, 3, 4, 5]
print(sum(numbers))  # 출력: 15
  • min(), max(): 최솟값과 최댓값 반환.
numbers = [3, 1, 4, 1, 5, 9]
print(min(numbers))  # 출력: 1
print(max(numbers))  # 출력: 9
  • abs(): 절댓값 계산.
num = -10
print(abs(num))  # 출력: 10
  • num = -10 print(abs(num)) # 출력: 10
  • round(): 반올림.
pi = 3.14159
print(round(pi, 2))  # 출력: 3.14

 

5) 데이터 정렬

  • sorted(): 데이터를 정렬한 새 리스트 반환.
numbers = [5, 3, 8, 6, 2]
print(sorted(numbers))  # 출력: [2, 3, 5, 6, 8]
print(sorted(numbers, reverse=True))  # 출력: [8, 6, 5, 3, 2]

내장 함수의 장점

  1. 사용 편의성:
    • 별도의 정의나 임포트 없이 바로 사용 가능.
    • 기본적인 작업을 간단히 수행할 수 있음.
  2. 안정성:
    • Python에서 이미 정의되고 검증된 함수로, 성능과 정확성을 신뢰할 수 있음.
  3. 코드 가독성:
    • 함수 이름만으로도 기능을 쉽게 이해할 수 있어, 코드가 명확하고 읽기 쉬움.

내장 함수 사용 시 주의사항

  1. 함수의 목적 이해:
    • 각 함수가 어떤 입력값을 기대하고, 어떤 결과를 반환하는지 명확히 이해하고 사용해야 함.
  2. 과도한 사용 피하기:
    • 내장 함수가 모든 문제를 해결할 수 있는 것은 아니며, 복잡한 로직이 필요한 경우 사용자 정의 함수를 고려.
  3. 예외 처리 필요:
    • 잘못된 입력값으로 인해 예외가 발생할 수 있으므로, 입력값을 검증하거나 예외 처리를 포함해야 함.