본문 바로가기

일상+자잘한 일

[Python] 파이썬 별표 의미 및 역할 + 자잘한 팁

한 줄 요약: 리스트 내 아이템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')

# 위와 같이 *이후에 값을 꼭 넣어줘야 오류가 발생하지 않음.

파이썬은 참 원하는 것들이 이미 다 있어서 찾기만 하면 되는 느낌이다.