2020년 5월 29일
[파이썬] 함수 입력 데이터 처리
I. 고정/가변 위치 인자 처리
고정 위치 인자 | 고정된 매개변수에 1대 1로 맵핑하는 인자 |
가변 위치 인자 | 하나의 매개변수에 여러 개를 맵핑하는 인자 |
가. 고정 위치 인자 처리
- 함수 호출 시 고정으로 인자를 전달해서 위치에 맞게 1대1로 맵핑하여 처리
- [예제] 고정 위치 인자 처리
def func1(a, b) : print("locals", locals()) # 매개변수와 인자 매칭 확인 return a + b print(func1(10, 20)) [결과] locals {'a': 10, 'b': 20} 30
나. 가변 위치 인자 처리
- 함수 호출 시 가변 위치 인자 처리를 통해 매개변수보다 많은 인자 전달 가능
- [예제] 가변 위치 인자 처리
def func(*args) : # 가변 인자 처리를 위해 매개변수 앞에 별표(*) 붙임 print("locals", locals()) result = 0 for i in args : # 인자에서 원소를 하나씩 꺼내어 덧셈 result += i return result print(func(10, 20, 30)) [결과] locals {'args': (10, 20, 30)} 60
다. 가변 키워드 인자 처리
- 딕셔너리(dic)는 키와 값의 한 쌍을 원소로 구성하는 자료 구조
- 딕셔너리 정의 시 내부 원소를 키와 값으로 검색하는 items 메소드 사용
- 함수 정의 시 가변 키워드를 매개변수의 인자로 받을 때 별표 2개(**)를 붙임
- 관행적으로 키워드 인자를 받는 매개변수 이름으로 kwargs 사용
- [예제] 가변 키워드 인자 처리
def func(**kwargs) : # 매개변수에 가변 키워드 인자를 받을 때 별표 2개(**) 붙임 print("locals", locals()) result = 0 for k, v in kwargs.items() : # 매개변수 값을 쌍으로 꺼낼 때 items 메소드 사용 result += v return result print(func(a=10, b=30, c=50)) [결과] locals {'kwargs': {'a': 10, 'b': 30, 'c': 50}} 90
II. 매개변수 혼용
가. 고정/가변 매개변수 혼용
- 고정/가변 매개변수를 혼용하여 처리 가능
- [예제] 고정/가변 매개변수 혼용 처리
def func(a, b, c, *args) : # 고정 매개변수 3개, 가변 매개변수 1개 print("locals", locals()) result = a + b + c for i in args : result += i return result print(func(10, 20, 30, 40, 50)) # 4번째 인자부터는 가변 인자로 전달 [결과] locals {'a': 10, 'b': 20, 'c': 30, 'args': (40, 50)} 150
나. 다양한 인자 전달을 위한 함수 정의
- 다양한 인자를 전달하여 함수 호출 시 사용
- [예제] 다양한 인자 전달을 위한 함수 정의
def func(*args, **kwargs) : result = 0 print("locals", locals()) for i in args : result += i for k, v in kwargs.items() : result += v return result print(func(10, 20, 30, 100, 200, a=1, b=2)) [결과] locals {'args': (10, 20, 30, 100, 200), 'kwargs': {'a': 1, 'b': 2}, 'result': 0} 363
III. 색인 검색 함수 메소드 전환
- 함수를 클래스의 메소드로 처리
- [예제] 색인 검색 함수를 메소드로 처리
a = ["a", "b", "c", "d", "e", "f"] class Index : @staticmethod # 데코레이터로 함수를 정적 메소드로 변환 def index(iterable, *args) : # 정적 메소드는 클래스에서 함수를 그대로 사용 result = [] for i in args : if i < len(iterable) : result.append(iterable[i]) else : continue return result print(Index.index(a, 1, 3, 4)) [결과] ['b', 'd', 'e']
[참고]
- 잇플, “한 권으로 개발자가 원하던 파이썬 심화 A to Z”, 2019.11