파이썬의 일반적인 함수 인자
보통의 파이썬 함수는 인자(파라미터)를 필요로 하고, 아래와 같이 쓰인다.
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 딕셔너리에 저장된다.
'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 |