요약
- 딕셔너리 구조를 통해 함수에 키워드 인자를 간접 삽입
- 이를 통해 가독성 및 리팩토링에 유리함
- 구조:
함수(**딕셔너리)
1. 개요
1) 목적
목적
- 기존 함수에 키워드 인자를 직접 전달하는 대신에 딕셔너리를 이용하여 간접 삽입
- 가독성 및 리팩토링에 효과적!
2) 구조
함수(**딕셔너리)
- 딕셔너리 객체 앞에 asterisk(
*
) 2개를 붙여서 하용
- 딕셔너리 객체 앞에 asterisk(
- 단, 딕셔너리의
key
값은 반드시 문자열 형태
2. 예시
1) 기본 예제
function(**args_dict)
=function(name = 'HJ', birthdate = '19960517')
- 단, 매개변수와 딕셔너리의 Key 이름과 개수는 동일!
def function(name, birth_date):
print(f'이름: {name}')
print(f'생년월일: {birth_date}')
args_dict = {'name' : 'HJ', 'birth_date' : '19960517'}
function(**args_dict)
## 이름: HJ
## 생년월일: 19960517
2) 덮어쓰기
- 딕셔너리 리터럴 안에서 사용가능
- KEY 이름이 동일하면 뒤의 것을 덮어씀
a = {"x": 1, "y": 2}
b = {"z": 3, "x": 5}
merged = {**a, **b}
print(merged) # {'x': 5, 'y': 2, 'z': 3}
3) 활용 예제(assign
함수)
Pandas의 assign 함수에 활용
-
내부 구조
df.assign(new_col1 = ..., new_col2 = ...)
df.assign(**{col : value})
-
즉 딕셔너리 언패킹을 통해 첫 번째 인자값을 컬럼명, 두번째 결과 값을 컬럼 값으로 가짐
-
기존 방식
df = df.assign(
hj_a = lambda df: df['score'] *1.5,
hj_b = lambda df: df['score'] *1.2
)
- 딕셔너링 언패킹
- 변수가 n개인 경우 각각 언패킹하는 방법(ver1)과 한 번에 언패킹하는 방법(ver2)이 존재
prefix = 'hj'
# 단일
df.assign(
**{f'{prefix}_a' : lambda df: df['score'] * 1.5}
)
# 여러개 ver1
df.assign(
**{f'{prefix}_a' : lambda df: df['score'] * 1.5},
**{f'{prefix}_b' : lambda df: df['score'] * 1.2}
)
# 여러개 ver2
df.assign(**{
f'{prefix}_a' : lambda df: df['score'] * 1.5,
f'{prefix}_b' : lambda df: df['score'] * 1.2
})
참고사이트