Partial application configures the parameters that remain constant while Dynamic Task Mapping creates separate task instances for changing values. In Airflow, partial() holds fixed operator arguments, including task_id, while expand() supplies the values to map over. section 12.1.8
Map addition over several values
PythonOperator.partial(task_id="add", python_callable=add_function, op_kwargs={"y": 10}).expand(op_args=[[1], [2], [3]]) keeps y constant and creates three mapped task instances with different x values.
Process ratings returned at runtime
PythonOperator.partial(task_id="print_rating", python_callable=_print_rating).expand(op_args=fetch_ratings.output) maps one printing task over every rating returned by fetch_ratings, allowing independent processing even when the count changes between DAG runs.









