🧩 Python의 *args, **kwargs 완전 정복 + Django 실전 활용 예시

2025. 5. 9. 14:06·기술블로그-Django편

🧩 Python의 *args, **kwargs 완전 정복 + Django 실전 활용 예시


🎯 목적

  • Python의 *args와 **kwargs의 개념과 차이를 이해하고,
  • Django에서의 get_context_data(self, **kwargs)와 같은 실전 예제를 통해 실무 활용법까지 익히기

✅ 1. 개념 요약

문법 의미 자료형 사용 목적

*args 위치 인자 여러 개 받기 tuple 함수에 몇 개가 들어올지 모를 인자 받기
**kwargs 키워드 인자 여러 개 받기 dict 이름 붙은 인자들을 유연하게 받기

🔹 2. *args 예제 (순서 기반 인자)

def add_all(*args):
    print("args:", args)
    return sum(args)

result = add_all(1, 2, 3, 4)
# 출력:
# args: (1, 2, 3, 4)
# result = 10
  • *args는 튜플로 여러 값을 받음 → 인자의 개수가 유동적일 때 유용

🔸 3. **kwargs 예제 (이름 기반 인자)

def show_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key} = {value}")

show_info(name="Alice", age=30, job="developer")
# 출력:
# name = Alice
# age = 30
# job = developer
  • **kwargs는 딕셔너리로 여러 이름 있는 인자를 받음

🔄 4. 혼합 사용 예제

def mixed_example(*args, **kwargs):
    print("Positional:", args)
    print("Keyword:", kwargs)

mixed_example(1, 2, a=3, b=4)
# 출력:
# Positional: (1, 2)
# Keyword: {'a': 3, 'b': 4}

⚠️ *args는 항상 **kwargs보다 앞에 와야 합니다.


🛠 5. Django 실전 예제: get_context_data(self, **kwargs)

# views.py
class BlogCreateView(CreateView):
    model = Blog
    template_name = 'blog_form.html'
    fields = ['title', 'content']

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['sub_title'] = '작성'
        context['btn_name'] = '생성'
        return context

✅ 해석

  • super().get_context_data(**kwargs) → 부모 클래스에서 넘겨준 context를 그대로 받아옴
  • 그 위에 sub_title, btn_name을 추가하여 템플릿에서 활용 가능하게 함
<!-- blog_form.html -->
<h1>블로그 {{ sub_title }}</h1>
<form method="post">
  {{ form.as_p }}
  <button>{{ btn_name }}</button>
</form>

🔍 핵심 요약 정리

구분 설명

*args 여러 개의 위치 인자 → 튜플로 받음
**kwargs 여러 개의 이름 붙은 인자 → 딕셔너리로 받음
Django get_context_data 부모 컨텍스트에 값을 추가할 때 **kwargs 사용
활용 예 sub_title, btn_name 등 템플릿 동적 처리

💡 팁

  • *args, **kwargs는 특히 함수 재사용성, 유연성을 높일 때 유용
  • Django 외에도 Flask, FastAPI, Pandas에서도 자주 활용됨

궁극적으로 *args, **kwargs를 이해하면 더 유연하고 유지보수하기 좋은 코드를 작성할 수 있게 됩니다 💪

'기술블로그-Django편' 카테고리의 다른 글

🧠 Django ModelForm에서 위젯 설정 완전 이해하기 (widgets, form-control)  (0) 2025.05.09
🛠 Django Admin에서 댓글(Comment)을 블로그(Blog)와 함께 관리하는 방법  (0) 2025.05.09
🛠 Django 기본 Form(as_p)을 간접 커스터마이징하는 방법  (0) 2025.05.09
🔁 Django {% include %} 문법으로 공통 자바스크립트 재사용하기  (0) 2025.05.09
🔵 Bootstrap 페이지네이션 UI에서 현재 페이지 강조하기  (0) 2025.05.09
'기술블로그-Django편' 카테고리의 다른 글
  • 🧠 Django ModelForm에서 위젯 설정 완전 이해하기 (widgets, form-control)
  • 🛠 Django Admin에서 댓글(Comment)을 블로그(Blog)와 함께 관리하는 방법
  • 🛠 Django 기본 Form(as_p)을 간접 커스터마이징하는 방법
  • 🔁 Django {% include %} 문법으로 공통 자바스크립트 재사용하기
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (787)
      • Python (32)
      • 프로젝트 (110)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    RM
    americaparty
    urbantrends
    youngprofessionals
    homebartrend
    life reflection
    btsdischarge
    livebroadcast
    hotcoffeecase
    titaniumcase
    remittance
    newpoliticalparty
    classaction
    gpterror
    college reunions
    뷔
    bts
    basalcellcarcinoma
    travel ban
    btsjungkook
    trumpmuskclash
    chatgpterror
    btscomeback
    self-growth
    americanlaw
    lawsuitculture
    btsreunion
    global politics
    chinanightlife
    smartphonedurability
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
🧩 Python의 *args, **kwargs 완전 정복 + Django 실전 활용 예시
상단으로

티스토리툴바