[Python] 파이썬 함수 파라미터 *args와 **kwargs

2024. 7. 22. 15:31·Minding's Programming/Airflow
728x90
반응형

파이썬의 일반적인 함수 인자

 

보통의 파이썬 함수는 인자(파라미터)를 필요로 하고, 아래와 같이 쓰인다.

def regist(name, sex):
	print(name)
    print(sex)

 

위 함수를 기준으로 봤을 때, 이름과 성별 말고도 추가적인 정보(이메일, 전화번호 등)를 받을 수도 있을 때에는 어떻게 해야할까? 저 함수를 그대로 놓고 추가적인 정보를 제공한다면 에러가 나기 때문에, 수정이 필요하다.

 

*args

 

첫 번째 방법으로는 *args를 사용할 수 있다.

def regist(name, sex, *args):
    print(type(args)) # args는 tuple 형태로 저장됨
    email = args[0] if len(args) >= 1 else None # 부가정보 없는 경우 대비해 None 처리
    p_number = args[1] if len(args) >= 2 else None
    
# 아래 두 경우 모두 에러를 피할 수 있음
regist('min hyeok jeong', 'man')
regist('minding', 'man', 'tlsfk48@gmail.com', '01012345678')

*args를 사용하면, email과 p_number라는 변수가 꼭 들어가지 않아도 해당 함수를 실행할 수 있고, 추가 정보가 들어오는 경우에도 args라는 tuple 형태로 인자를 받을 수 있다.

 

*args는 꼭 해당 형태로 이용하지 않아도 되고, *kk *mail *tech 등 원하는 이름으로 만들 수 있다.

 

 

**kwargs

 

두 번째 방법으로 **kwargs를 사용할 수 있다.

def regist(**kwargs):
    print(type(kwargs)) # kwargs는 딕셔너리 형태
    print(kwargs)
    name = kwargs.get('name') or '' # or의 의미 kwargs 딕셔너리에 name 키 값이 없을 경우 '' 반환
    sex = kwargs.get('sex')
    email = kwargs.get('email')
    

regist(name='minding', sex='woman', email='abc@naver.com')

**kwargs는 키워드 형태의 딕셔너리로 인자를 받는 형태이다.각 변수 별로 인자를 입력받아 딕셔너리 형태로 저장할 수 있다.

 

해당 방법을 사용해 함수를 구성할 경우, 각 변수에 입력된 값을 불러올 때 kwargs[name]과 같이 직접 인덱싱하기 보다는 .get() 메서드를 통해 키값(value)을 불러오는 것이 안전하다. 직접 인덱싱할 경우 해당 키가 없을 때 에러가 날 수 있지만, get() 메서드를 사용할 경우 키값이 없어도 None으로 반환되기 때문이다.

 

 

*args와 **kwargs를 같이 쓰는 방법

 

*args와 *kwargs를 같이 쓸 수 있다. 함수를 실행할 때 key값을 정해주는지의 여부에 따라 인자의 저장 위치가 달라진다.

def regist(name, sex, *args, **kwargs):
...


regist('minding', 'man', 'korea', 'seoul', email = 'ddfd@naver.com', p_number = '01010202010')

위 함수에서 필수 인자인 name과 sex에는 각각의 변수에 저장되고, 필수 인자가 아닌 값인 'korea'와 'seoul'은 args 튜플에 저장된다. 

 

필수 인자가 아니지만 key값이 email, p_number로 지정된 이메일 주소와 전화번호는 kwargs 딕셔너리에 저장된다.

728x90

'Minding's Programming > Airflow' 카테고리의 다른 글

[Python/Jinja/Airflow] Jinja 템플릿과 Airflow에서의 사용방법  (2) 2024.07.22
[Airflow] Python Operator의 op_args, op_kwargs  (1) 2024.07.22
[Airflow] Python Operator 사용과 Python Decorator  (0) 2024.07.22
[Airflow] Email 오퍼레이터 사용해보기 (Gmail 서버 사용)  (0) 2024.07.19
[Airflow] Bash Operator로 쉘 스크립트 파일 실행하기  (0) 2024.07.19
'Minding's Programming/Airflow' 카테고리의 다른 글
  • [Python/Jinja/Airflow] Jinja 템플릿과 Airflow에서의 사용방법
  • [Airflow] Python Operator의 op_args, op_kwargs
  • [Airflow] Python Operator 사용과 Python Decorator
  • [Airflow] Email 오퍼레이터 사용해보기 (Gmail 서버 사용)
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    django
    딥러닝
    데이터분석
    mlb stats api
    FastAPI
    야구
    넘파이
    파이썬
    칼만필터는어렵지않아파이썬
    django python
    칼만필터는어렵지않아python
    칼만필터는어렵지않아
    KalmanFilter
    머신러닝
    pygame
    메이저리그
    파이게임
    Python
    데이터 엔지니어
    MLB
    코딩테스트
    파이썬게임개발
    게임개발
    KBO
    AWS
    칼만필터
    에어플로우
    Airflow
    질롱코리아
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[Python] 파이썬 함수 파라미터 *args와 **kwargs
상단으로

티스토리툴바