MCP - 5일차(함수)

Jun·2026년 1월 30일

MCP

목록 보기
6/20

🐍 Python 프로그래밍: 함수(Function) 총정리

함수는 반복되는 코드의 낭비를 없애기 위해 "반복적으로 사용되는 가치 있는 부분"을 한 뭉치로 묶어서 정의하고 사용하는 것입니다.


1. 함수의 정의와 호출 (Definition & Call)

💡 함수를 사용하는 이유

  1. 코드 재사용: 동일한 코드가 반복될 때 효율적으로 관리.
  2. 구조화: 입력 -> 본체 수행 -> 결과(리턴)의 흐름으로 로직 정리.

🛠 기본 문법

def 함수이름(매개변수):
    수행할 문장
    return 결과값

호출 예시

함수이름(인자)

2. 매개변수와 인자 (Parameter & Argument)

  • 매개변수(Parameter): 함수 정의 시 입력값을 받는 변수.
  • 인자(Argument): 함수 호출 시 실제로 넘겨주는 값.

🔹 인자 전달 방식

  1. Positional Arguments: 정의된 순서대로 전달.
  2. Keyword Arguments: name=value 쌍으로 전달 (순서 상관 없음).
  3. Default Arguments: 매개변수에 기본값을 지정하여 호출 시 생략 가능.
  • 예시
def say_hello(name, age):
    print(f"이름: {name}, 나이: {age}")


say_hello('토르', 100)          # 위치 인자 방식
say_hello(age=15, name='토끼')  # 키워드 인자 방식


# 디폴트 매개변수 방식
def say_myself(name, age, gender='M'):
    print(f"이름: {name}, 성별: {gender}")

say_myself('최현진', 25) # gender 생략 시 'M' 적용

3. 리턴 (Return)

  • return은 함수를 종료하고 호출한 측에 값 하나를 돌려줍니다.
  • 여러 값을 리턴하면 파이썬은 이를 Tuple(튜플) 하나로 묶어서 반환합니다.
def sum_and_mul(a, b):
    return a + b, a * b  # 튜플 리턴

result = sum_and_mul(3, 4) # (7, 12)

aaa, bbb = sum_and_mul(3, 4)

4. 가변 매개변수 (Packing & Unpacking)

📦 Packing (*args, **kwargs) - 중요

  • *args : 여러 개의 위치 인자를 하나의 Tuple로 묶습니다.
def func_args(*args):
    print(f"타입: {type(args)}, 값: {args}")

func_args(10, 20, 30) # (10, 20, 30) 튜플로 패킹


# 출력 결과 : 타입: <class 'tuple'>, 값: (10, 20, 30)
  • **kwargs : 키워드 인자들을 하나의 Dict로 묶음. (keyword arguments)
    함수 정의 시 매개변수 앞에 **를 붙이면, 호출할 때 넘겨준 key=value 형태의 인자들이
    하나의 딕셔너리(Dictionary)로 묶여서 함수 내부로 전달됩니다.
def func_kwargs(**kwargs):
    print(f"타입: {type(kwargs)}")
    print(f"전체 값: {kwargs}")
    
    # 내부의 값을 꺼내 쓸 때
    if 'name' in kwargs:
        print(f"이름은 {kwargs['name']}입니다.")

# 함수 호출 (이름=값 형태로 전달)
func_kwargs(name='john', age=32, city='Seoul')

**[실행 결과]**
타입: <class 'dict'>
전체 값: {'name': 'john', 'age': 32, 'city': 'Seoul'}
이름은 john입니다.

🔍 핵심 포인트 정리

  1. 데이터 타입의 변화:

    • 호출 시 전달한 키워드 인자들이 함수 내부에서는 dict 타입으로 변환됩니다.
  2. 유연한 인자 처리:

    • 미리 정해지지 않은 다양한 옵션이나 설정값들을 한꺼번에 받을 때 매우 유용합니다.
  3. 딕셔너리 메서드 활용:

    • 함수 내부에서 kwargs.keys(), kwargs.values(), kwargs.items() 등을 사용하여 전달받은 데이터를 자유롭게 다룰 수 있습니다.

💡 Packing vs Unpacking 한눈에 보기

구분기호결과물 타입주요 용도
args*Tuple순서가 있는 여러 인자를 받을 때
kwargs**Dict이름이 지정된 여러 인자를 받을 때

Tip: *args**kwargs를 동시에 사용할 때는 반드시 *args를 먼저 써야 합니다.
예: def func(*args, **kwargs):

🔓 Unpacking

  • 호출 시 * 또는 **를 사용하여 시퀀스나 딕셔너리 데이터를 개별 인자로 풀어 전달.
def print_val(kor, eng, math):
    print(f"총점: {kor + eng + math}")

score = [10, 20, 30]
print_val(*score) # 리스트 언패킹 전달

5. 람다 (Lambda)

'이름이 없는' 익명 inline 함수입니다.
구문: lambda [매개변수]: 표현식

sqr = lambda x: x ** 2
print(sqr(10)) # 100

# 두번째 매개변수로 함수를 받는 함수 정의
def apply_func(numbers, func):  
  return [func(number) for number in numbers]

apply_func([3, -2, 7], lambda x: x ** 2) # 결과: [9, 4, 49]

apply_func([3, -2, 7], lambda x: x * 2) # 결과: [6, -4, 14]

6. 🛠️ Python 고차 함수: map, filter, reduce 완벽 정리

파이썬에서 함수를 인자로 받아 데이터를 효율적으로 처리하는 고차 함수(Higher-order Functions)의 개념과 사용법입니다.


핵심 개념 요약

함수변환 관계설명
map()N → N모든 요소에 함수를 적용하여 동일한 개수의 결과 생성
filter()N → N' (N' ≤ N)조건을 만족하는(True) 요소만 남기고 나머지는 제거
reduce()N → 1모든 요소를 누적 연산하여 하나의 결과로 압축

map() : 모든 요소에 동작 적용 (N → N)

집합 데이터의 각 원소에 특정 연산을 일괄 적용할 때 사용합니다. 결과는 map 객체로 반환되므로 list()로 형변환이 필요합니다.

  • 구문: map(함수, iterable)

  • 전달 함수: 1개의 매개변수와 1개의 리턴값이 있는 형태

    예시: 리스트의 모든 요소를 제곱 처리

list(map(lambda x: x ** 2, [10, 20, 30]))
# 결과: [100, 400, 900]

filter() : 조건에 따른 필터링 (N → N')

각 요소에 대해 참(True)/거짓(False)을 판별하여, 참인 요소만 남깁니다.

  • 구문: filter(함수, iterable)

  • 전달 함수: 참/거짓을 반환하는 조건식 형태

    예시: 3의 배수만 골라내기

list(filter(lambda x: x % 3 == 0, [3, 7, 9]))
# 결과: [3, 9]

**[내부 동작 과정]**
입력: [3, 7, 9]
판별: [3%3==0(T), 7%3==0(F), 9%3==0(T)]
결과: [3, 9]

reduce() : 하나의 값으로 압축 (N → 1)

데이터를 왼쪽에서 오른쪽으로 순차적으로 누적 연산합니다. functools 모듈에서 가져와야 합니다.

from functools import reduce

# 예시: 리스트의 모든 합계 구하기
reduce(lambda x, y: x + y, [1, 2, 3, 4])

# 결과: 10 ((1+2)+3)+4

🔍 정리 포인트

  1. 가독성: 람다(lambda)와 함께 사용하면 코드가 매우 간결해집니다.
  2. 반복 가능(Iterable): map과 filter의 리턴값은 반복 가능한 객체이므로 바로 확인하려면 list()를 씌워야 합니다.
  3. 용도 구분: 데이터를 변환할 때는 map, 데이터를 걸러낼 때는 filter를 사용하세요.

7. 내장 함수 & 표준 라이브러리

📦 주요 내장 함수 (Built-in)

별도 import 없이 바로 사용: abs(), min(), max(), sum(), len(), type(), range(), int(), str() ,sorted()등.


📚 표준 라이브러리 (Standard Library)

파이썬 설치 시 기본적으로 제공되는 모듈들로, import를 통해 사용 가능합니다.


🎲 random 모듈

  • random.random() : 0.0 이상 1.0 미만의 난수 리턴

  • random.seed(K) : 랜덤 결과값 고정

random.seed(42) # 시드 고정
print(random.random()) # 몇 번을 다시 실행해도 같은 값이 나옴
  • random.shuffle(data) : 요소를 무작위로 섞음
data = ['dog', 'cat', 'bird', 'fish']
random.shuffle(data)
print(data) # 원본의 순서가 무작위로 바뀜

📐 math 모듈

  • math.pi / math.e: 원주율 및 자연상수
  • math.ceil(n): 올림 (주어진 수보다 큰 최소 정수)
  • math.floor(n): 내림 (주어진 수보다 작은 최대 정수)
  • math.trunc(n): 소수점 이하 절삭

⏰ time & datetime 모듈

1. time.time()

결과: 1769773595.123456 (실행 시점마다 다름)
설명: 1970년 1월 1일 00:00:00(UTC) 이후 현재까지 경과한 시간을 '초' 단위로 반환합니다.
이를 타임스탬프(Unix Timestamp)라고 부릅니다.

2. time.localtime(time.time())

결과: time.struct_time(tm_year=2026, tm_mon=1, tm_mday=30, tm_hour=20, tm_min=46, tm_sec=35, tm_wday=4, tm_yday=30, tm_isdst=0)
설명: 타임스탬프 값을 시스템의 현지 시간대(Local time) 기준으로 변환하여 연, 월, 일, 시, 분, 초 등의 속성을 가진 객체로 반환합니다.

3. time.strftime('%Y-%m-%d %H:%M:%S')

결과: '2026-01-30 20:46:35'
설명: 현재 시간을 지정한 포맷 문자열 형식으로 변환합니다.

  • %Y: 4자리 연도 / %m: 월 / %d: 일
  • %H: 시간(24시간제) / %M: 분 / %S: 초

4. datetime.datetime(year=2025, month=1, day=23)

결과: datetime.datetime(2025, 1, 23, 0, 0)
설명: 사용자가 지정한 특정 날짜(2025년 1월 23일)를 가진 datetime 객체를 생성합니다. 시/분/초를 지정하지 않으면 0으로 설정됩니다.

5. datetime.datetime.now()

결과: 2026-01-30 20:46:35.654321
설명: 현재 시스템의 로컬 날짜와 시간을 마이크로초 단위까지 정밀하게 반환합니다.

6. datetime.datetime.now(ZoneInfo('Asia/Seoul'))

결과: 2026-01-30 20:46:35.654321+09:00
설명: 특정 시간대(서울)를 기준으로 현재 시간을 가져옵니다. 끝의 +09:00은 UTC 표준시보다 9시간 빠르다는 의미입니다.


Tip: 함수 본체 수행 중 return을 만나면 즉시 함수가 종료됩니다. return 뒤에 값이 없으면 None을 반환합니다.

profile
Hard Trying

0개의 댓글