새벽코딩

파이썬 키워드 인자 & 가변 인자 (feat 매개변수와 인자 차이) 본문

Programming/Python

파이썬 키워드 인자 & 가변 인자 (feat 매개변수와 인자 차이)

midnightcoder 2022. 12. 31. 17:35

프로그래밍에서 매개변수(Parameter)와 인자(Argument)는 자주 사용되는 용어인데, 차이점에 대해서 알아보자

 

- 매개변수(Parameter)

: 함수의 정의에서 전달받은 인수를 함수 내부로 전달하기 위해 사용하는 변수

- 인수, 인자(Argument)

: 실제로 함수가 호출될 때 함수로 값을 전달해주는 값

- 매개변수와 인수의 차이

- 키워드 인자(keyword parameter)

: 함수를 호출할 때 인자의 값 뿐만 아니라, 그 이름까지 명시적으로 지정해서 전달하는방법

def print_profile(name, age, company):
    print(name, age, company)


print_profile(name="호날도", age=40, company="알아인(사우디)")
print("===================================================")
print_profile(age=31, company="전북현대", name="김진수")
print("===================================================")
print_profile("손흥민", 31, "토트넘")

호날도, 김진수 예시의 경우 name=, age=, company= 와 같이 키워드를 이용해서 인자의 값과 이름을 같이 전달하고있다.

키워드가 사용되었을 경우, 인자의 순서는 상관없다.

 

마지막 손흥민 예시처럼 키워드가 없이 사용도 가능하다.

출력결과

단, 아래와 같이 한개만 키워드를 붙여서 사용할 수는 없다. 

print_profile(name="손흥민", 31, "토트넘")

 

- 가변 길이 매개변수 ( *args, **kargs)

: *, ** 접두사는 가변길이 매개변수이다.

 

*args : *arguments 의 줄임말

**kargs : **keyword arguments 의 줄임말 (매개변수 이름 args, kargs는 중요하지 않다)

 

 


 *arg 예시 코드

: 인자들을 가변 길이 (즉, 개수가 정해져있지 않다)로 입력받은 후 하나의 튜플로 만들어 함수 내에서 사용 가능

국어, 수학, 영어를 입력 받든, 국어~음악까지 6과목을 입력 받든 가변 길이로 잘 동작 
지시어 `*`(별문자, asterisk)만 있다면 뒤에 매개변수 명칭은 상관없음 ex) *args, *abcde

def print_input(*args):
    type_value_check = "{0} : {1}".format(type(args), args)
    print(type_value_check)

    for value in args:
        print(value, end=" ")
    print("")


print_input('국어', '수학', '영어')
print_input('국어', '수학', '영어', '과학', '사회', '음악')

출력값

 


**kagrs 예시코드

: (key = value) 형태의 인자들을 가변 길이로 입력받은 후 Dictionary로 만들어 함수 내에서 사용

`*`args와 마찬가지로 지시어 `**`만 있다면 뒤에 매개변수 이름은 무엇이든 상관없음

def print_subject_score(**kargs):
    type_value_check = "{0} : {1}".format(type(kargs), kargs)
    print(type_value_check)

    for key, value in kargs.items():
        subject_score = "{0} is {1}".format(key, value)
        print(subject_score)


print_subject_score(korean=97, math=96, english=94)
print("============================================")
print_subject_score(korean=97, math=96, english=94, science=100)

출력값

단, 매개변수의 형태를 여러가지를 동시에 사용시 순서를 지켜야한다.

>> 일반매개변수, *arg, **kargs 순서로 사용해야됨

 

def parameter_order(normal, *args, **kargs):
...

parameter_order('normal_arg', 'arg1', 'arg2', a=10, b=20, c=30)

 

출처 : https://mentha2.tistory.com/197 '행궁동 데이터 엔지니어'

출처 : https://nadocoding.tistory.com/50 '나도코딩'