본문 바로가기
Minding's Programming/Airflow

[Airflow] Python Operator의 op_args, op_kwargs

by Minding 2024. 7. 22.
728x90
반응형

*args와 **kwargs의 개념 정리: [Python] 파이썬 함수 파라미터 *args와 **kwargs

 

op_args

 

파이썬 오퍼레이터를 사용해 파이썬 함수를 실행시킬 경우 해당 함수의 파라미터는 op_args를 통해 전달한다.

as dag:
    def regist(name, sex):
    print(f'이름은 {name}이고 성별은 {sex}입니다.')
    
py_task_1 = PythonOperator(
	task_id = 'py_task_1',
    python_callable=regist,
    op_args = ['minding', 'man'] # 리스트 형태로 작성
    
py_task_1 = PythonOperator( # *args가 있을 경우
	task_id = 'py_task_1',
    python_callable=regist,
    op_args = ['minding', 'man', 'abcd@naver.com'] # 리스트 형태로 작성

기본적으로 인자는 리스트 형태로 전달되며, *args가 있는 경우에도 그대로 리스트에 값을 추가해주면 된다.

 

task 데코레이터를 사용하는 경우 일반 함수 인자를 넣듯이 사용해도 된다.

with DAG(
    dag_id = 'dags_python_with_op_args',
    schedule = None,
    start_date = pendulum.datetime(2024, 7, 1, tz="Asia/Seoul"),
    catchup = False,
    tags=["practice"]
) as dag:

    py_task_1 = regist('minding', 'man', 'kr', 'seoul')

 

 

op_kwargs

as dag:
    def regist(name, sex, **kwargs):
    print(f'이름은 {name}이고 성별은 {sex}입니다.')
    print(kwargs)
    
py_task_1 = PythonOperator(
	task_id = 'py_task_1',
    python_callable=regist,
    op_kwargs = {'name':'minding', 'sex':'man'} # 딕셔너리 형태로 작성
    
py_task_1 = PythonOperator( # *kwargs가 있을 경우
	task_id = 'py_task_1',
    python_callable=regist,
    op_kwargs = {'name':'minding', 'sex':'man', 'country':'kr', 'email':'abc123@yahoo.co.kr'} # 딕셔너리 형태로 작성

기본적으로 인자는 딕셔너리 형태로 전달되며, *args가 있는 경우에도 그대로 딕셔너리에 값을 추가해주면 된다.

 

 

op_args와 op_kwargs 모두 사용하는 경우

def regist2(name, sex, *args, **kwargs):
    print(f'이름: {name}')
    print(f'성별: {sex}')
    print(f'기타옵션들: {args}')
    email = kwargs['email'] or None
    phone = kwargs['phone'] or None
    if email:
    	print(email)
    if phone:
    	print(phone)
        
        
 with DAG(
    dag_id = 'dags_python_with_op_kwargs',
    schedule = None,
    start_date = pendulum.datetime(2024, 7, 1, tz="Asia/Seoul"),
    catchup = False,
    tags=["practice"]
) as dag:
    
    regist2_t1 = PythonOperator(
        task_id = 'regist2_t1',
        python_callable = regist2,
        op_args = ['minding', 'man', 'kr', 'seoul'],
        op_kwargs = {'email':'tlsfk48@gmail.com', 'phone':'01011112222'}
    )

    regist2_t1

op_args와 op_kwargs 모두 사용할 수 있다. op_args에 키 값이 필요없는 인자를 리스트 형태로 넣고, op_kwargs에 키 값이 필요한 인자들을 딕셔너리 형태로 넣어주면 된다.

728x90
반응형

댓글