🧩 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 |