[파이썬] 함수 입력 데이터 처리

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

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^