한 줄 요약: 리스트 내의 아이템을 unpacking함
머신러닝 코드를 짜다가 아래와 같은 feature_engine object들을 문자열로 받아 한꺼번에 파이프라인에 넣어야 하는 일이 생겼다.
feature = ['feature_engine.outliers.trimmer.OutlierTrimmer', 'feature_engine.outliers.power.PowerTransformer']
파이프라인은 아래와 같이 estimator object 타입 리스트를 받는다고 되어있어 eval로 덮어주면 끝인줄 알았으나, 원했던 것처럼 OutlierTrimmer를 거치고 PowerTransformer를 거치는 것이 아니라 오른쪽과 같이 리스트에 담겨서 한꺼번에 처리되게 되었다.
이 때 아래와 같이 iterate를 해주면 또 generator형식으로 pipeline에 들어가 문제를 겪던 중 *에 대해서 알게 되었다.
make_pipeline(x for x in feature)
파이썬 별표 사용법은 총 5가지 정도로 나뉜다.
1. Unpacking: Iterate 가능한 문자열, 튜플, 리스트의 개별 요소로 반환
numbers = [1, 2, 3, 4]
print(*numbers)
# 결과: 1 2 3 4
2. Extended Unpacking: 개별 요소로 확장하여 사용도 가능하다.
first, *rest = [1, 2, 3, 4]
print(first)
# 결과 1
print(rest)
# 결과 [2, 3, 4]
3. Arbitrary Arguments in Function Definitions: 함수의 argument의 갯수를 지정하지 않고 다양하게 받아 사용.
def print_args(*args):
for arg in args:
print(arg, end = ', ')
print_args(1, 2, 3)
# 결과 1, 2, 3
4. Keyword Arguments in Function Calls: 함수에서 키워드 argument를 dictionary로 전달
def print_kwargs(**kwargs):
print(type(kwargs))
for key, value in kwargs.items():
print(key, value)
print_kwargs(name="Eric", major="CS", height=180)
"""
결과
<class 'dict'>
name Eric
major CS
height 180
"""
5. Unpacking in List, Tuple, and Set Literals: 리스트, 튜플, set 등에서 다른 반복가능한 요소 원소를 개별로 반환.
a = ['g', 'l', 'o']
b = ['r', 'y']
c = ['k', 'o']
my_name = [*a, *b, *c]
print([a, b, c])
print(my_name)
"""
결과
[['g', 'l', 'o'], ['r', 'y'], ['k', 'o']]
['g', 'l', 'o', 'r', 'y', 'k', 'o']
"""
6. Enforce keyword-only arguments in Class: 별 이후에 있는 argument에 대해 초기값 지정을 강제
class Student(self, age, *, color='blue', name, drink):
self.age = age
self.color = color
self.name = name
self.drink = drink
Student(drink = 'water', name='gloryko')
Student(age = 3.141592, drink = 'americano', name = 'skygrace')
Student(color = 'red', drink = 'americano', name = 'skygrace')
# 위와 같이 *이후에 값을 꼭 넣어줘야 오류가 발생하지 않음.
파이썬은 참 원하는 것들이 이미 다 있어서 찾기만 하면 되는 느낌이다.
'일상+자잘한 일' 카테고리의 다른 글
[우테코/프리코스/Day 1] JAVA 17설치 및 환경변수 설정 (0) | 2023.10.22 |
---|---|
[C++] set operator 사용 시 const가 필요한 이유 (0) | 2023.10.12 |
SSAFY 10기 합격 후기. (2) | 2023.06.22 |
왜 오차에는 제곱을 할까 (0) | 2022.11.13 |
[Mac] 업데이트 이후 xcode 환경변수 오류 (0) | 2022.11.11 |