본문 바로가기
Python/문법

Python 함수 (Functions) 정의하기 -def 와 lambda

by ssury94 2025. 1. 21.

함수란 무엇인가?

함수는 재사용 가능한 코드 블럭입니다. 데이터(또는 arguments)를 입력받아 특정 작업을 수행한 뒤, 결과를 반환(return)합니다. 프로그래밍을 하다 보면 반복적이거나 재사용이 필요한 코드가 있을 때 이를 함수로 만들어 활용할 수 있습니다.

또한, 많은 개발자들이 이미 재사용 가능한 함수들을 만들어 놓았는데, 이를 라이브러리(library)라고 부릅니다. 우리가 필요한 기능을 구현하지 않아도, 라이브러리의 함수를 가져다 사용하면 많은 시간을 절약할 수 있습니다.

함수 정의하기

파이썬에서는 def 키워드를 사용하여 함수를 정의합니다.

기본 구조

def 함수이름(파라미터1, 파라미터2):
    # 함수의 동작 정의
    return 결과값

 

 

CPU에서의 함수의 작동 순서

주요 개념 설명

1. 파라미터와 아규먼트의 의미

  • 파라미터(Parameter): 함수가 호출될 때 받을 데이터를 정의하는 변수입니다. 함수 내부에서 이 데이터를 사용합니다.
  • 아규먼트(Argument): 실제로 함수 호출 시 전달되는 값입니다.

2. 리턴(Return)의 의미

  • 함수는 return을 통해 결과값을 반환할 수 있습니다.
  • 리턴이 없는 함수: return을 사용하지 않으면, 함수는 암묵적으로 None을 반환합니다.

3. 다양한 파라미터 조합 예제

파라미터가 하나인 경우:

def square(num):
    return num ** 2

print(square(4))  # 출력: 16

 

 

파라미터가 두 개인 경우:

def add(a, b):
    return a + b

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

 

 

리턴 값이 여러 개인 경우:

def calculate(a, b):
    return a + b, a - b

result = calculate(7, 3)
print(result)  # 출력: (10, 4)

리턴 값이 여러 개인 경우, 결과는 튜플(tuple)로 반환됩니다.

4. 디폴트 파라미터(Default Parameter)

함수를 정의할 때, 파라미터에 기본값을 설정할 수 있습니다. 이를 통해 함수 호출 시 일부 파라미터를 생략할 수 있습니다.

def greet(name, message="안녕하세요"):
    return f"{message}, {name}!"

print(greet("철수"))  # 출력: 안녕하세요, 철수!
print(greet("영희", "반가워요"))  # 출력: 반가워요, 영희!

주의: 디폴트 파라미터를 사용한 경우, 함수 호출 시 순서를 바꿔 사용하려면 변수명을 명시해야 합니다.

 

print(greet(message="환영합니다", name="민수"))  # 출력: 환영합니다, 민수!

✨ 파이썬 기본 제공 함수

파이썬은 자주 사용되는 기능들을 기본 함수로 제공합니다. 예를 들면:

  • len(): 길이 반환
  • max(): 최댓값 반환
  • min(): 최솟값 반환
  • sum(): 합 반환
numbers = [10, 20, 30]
print(len(numbers))  # 출력: 3
print(max(numbers))  # 출력: 30
print(min(numbers))  # 출력: 10
print(sum(numbers))  # 출력: 60

✨ 람다 함수 (Lambda Expressions)

람다 함수는 짧고 간단한 익명 함수입니다. lambda 키워드를 사용해 정의하며, 주로 간단한 동작을 함수로 표현할 때 사용됩니다.

# 일반 함수 정의
add = lambda x, y: x + y
print(add(3, 5))  # 출력: 8

람다 함수는 보통 한 줄로 작성되고, 간단한 작업을 빠르게 처리할 때 사용됩니다.

✨ 함수 설명 문서: Docstring

함수의 동작을 이해하기 쉽도록 설명을 추가할 수 있습니다. 이를 Docstring이라고 하며, 함수 정의 바로 아래에 삼중 따옴표(""")로 작성합니다.

def add(a, b):
    """두 수를 더하는 함수입니다."""
    return a + b

print(add(2, 3))  # 출력: 5

 

help(Sum) 으로 주석 내용 확인 가능

 

 

✨ 가변 파라미터: *args

*를 사용하면, 함수가 가변적인 개수의 인자를 받을 수 있습니다.

def get_statistics1(*my_nums):
    my_list = list(my_nums)
    maxnum = max(my_list)
    minnum = min(my_list)
    avg = sum(my_list) / len(my_list)
    return maxnum, minnum, avg, my_list

result = get_statistics1(10, 20, 30, 40)
print(result)  # 출력: (40, 10, 25.0, [10, 20, 30, 40])

✨ *args 작동 방식

  • *args는 입력값을 튜플 형태로 받습니다.
  • 함수 정의 시 *args를 사용하면, 전달된 모든 값을 하나의 튜플로 처리합니다.
def example(*args):
    print(args)

example(1, 2, 3)  # 출력: (1, 2, 3)

 

 

 

✨ 파이썬과 자바의 메서드 정의 차이점

1. 메서드 정의 구조

  • 파이썬: 파이썬은 동적 타이핑 언어로, 함수의 파라미터나 리턴 값의 데이터 타입을 명시하지 않아도 됩니다. 함수 정의가 간결하며, 데이터 타입 검사나 선언은 선택적입니다.
def greet(name):
    return f"Hello, {name}!"
  • 자바: 자바는 정적 타이핑 언어로, 메서드를 정의할 때 파라미터와 리턴 값의 데이터 타입을 명시해야 합니다. 메서드는 반드시 클래스 내부에 정의됩니다.
public class Main {
    public static String greet(String name) {
        return "Hello, " + name + "!";
    }
}

2. 클래스와 메서드의 관계

  • 파이썬: 함수는 클래스 내부뿐만 아니라 클래스 외부에서도 정의할 수 있습니다.
  • 자바: 모든 메서드는 반드시 클래스 내부에 정의되어야 하며, 함수와 메서드는 동일한 개념으로 취급됩니다.

3. 동적 타이핑 vs 정적 타이핑

  • 동적 타이핑 (Dynamic Typing): 파이썬은 변수나 함수의 데이터 타입을 실행 시점에 결정합니다. 따라서 코드가 간결하고 유연하지만, 타입 관련 오류를 실행 중에 발견할 가능성이 있습니다.
def add(a, b):
    return a + b

print(add(3, 5))  # 출력: 8
print(add("hello", "world"))  # 출력: helloworld
  • 정적 타이핑 (Static Typing): 자바는 컴파일 시점에 변수와 함수의 타입을 검사합니다. 이는 타입 안정성을 제공하지만, 코드가 더 길고 덜 유연할 수 있습니다.
public static int add(int a, int b) {
    return a + b;
}

System.out.println(add(3, 5));  // 출력: 8
// System.out.println(add("hello", "world"));  // 컴파일 에러 발생