본문 바로가기

코딩/파이썬 기초

[Python] 파이썬 튜토리얼 022. 함수, 특수 매개변수 정의 - positional only, positional or keyword, keyword only (/, *)

▶ 함수, 특수 매개변수 정의 - positional only, positionaly or keyword, keyword only (/, *)

 

python : 함수 : special parameters

 

함수 호출 시 전달인자의 값을 정의하는 위치(=순서) 또는 키워드=값 형식에 따라 전달인자의 값이 함수에 전달된다.

 

함수의 매개변수를 정의할 때 /(슬래시)나 *(애스터리스크)를 사용해 함수 호출 시 입력하는 전달인자의 형식을 제한할 수 있다.

 

def f(pos1, pos2, /, pos_or_kwd1, pos_or_kwd2, *, kwd1, kwd2):
      -----------    ------------------------     ----------
        |             |                           |- Keyword only
        |             |- Positional or keyword
        |- Positional only

 

▶ Positional Only

함수의 매개변수를 정의할 때 /(슬래시)를 사용하면, / 앞에 정의하는 매개변수는 Positionaly Only 특성을 갖는다.

 

예를 들어 아래의 코드에서 처럼 func_1 함수를 호출할 때 1의 값은 pos1에, 2의 값은 pos2에 전달된다.

 

# python 3.9.5

def func_1(pos1, pos2):
    print(pos1, pos2)

func_1(1, 2)

 

positional only 특성의 매개변수 미정의

 

하지만 위의 코드에서 함수의 매개변수 정의를 아래와 같이 변경한 후 (마지막에 / 추가) func_1 함수를 호출할 때 키워드=값 형식을 사용하면 오류가 발생한다. 물론 함수의 정의에서 /를 삭제하면, 아래의 코드는 오류없이 실행된다.

 

# python 3.9.5

def func_1(pos1, pos2, /):
    print(pos1, pos2)

func_1(pos1=1, pos2=2)

 

positional only 특성의 매개변수 정의

▶ Positional or Keyword

함수의 매개변수를 정의할 때 /(슬래시) 뒤에 정의하는 매개변수는 Positionaly 또는 Keyword 특성을 갖는다.

 

아래의 코드에서 처럼 func_1의 매개변수 pos1과 pos1은 키워드=값 형식으로 값을 받을 수 없으나, pos_kwd1과 pos_kwd2는 키워드=값 형식으로도 값을 받을 수 있다.

 

# python 3.9.5

def func_1(pos1, pos2, /, pos_kwd1, pos_kwd2):
    print(pos1, pos2)
    print(pos_kwd1, pos_kwd2)

func_1(1, 2, 3, pos_kwd2=4)

 

positional or keyword 특성의 매개변수 정의

▶ Keyword Only

마지막으로 함수의 매개변수를 정의할 때 * 뒤에 정의하는 매개변수는 Keyword Only 특성을 갖는다.

 

아래의 코드에서 처럼 func_1의 매개변수 kwd1과 kwd2는 키워드=값 형식으로만 값을 받을 수 있다.

 

def func_1(pos1, pos2, /, pos_kwd1, pos_kwd2, *, kwd1, kwd2):
    print(pos1, pos2)
    print(pos_kwd1, pos_kwd2)
    print(kwd1, kwd2)

func_1(1, 2, 3, pos_kwd2=4, kwd1=5, kwd2=6)

 

keyword only 특성의 매개변수 정의

 

따라서 아래의 코드와 같이 func_1 함수를 호출할 때 매개변수 kwd1 또는 kwd2에 대하여 키워드=값 형식을 사용하지 않으면 오류가 발생한다.

 

# python 3.9.5

def func_1(pos1, pos2, /, pos_kwd1, pos_kwd2, *, kwd1, kwd2):
    print(pos1, pos2)
    print(pos_kwd1, pos_kwd2)
    print(kwd1, kwd2)

func_1(1, 2, 3, pos_kwd2=4, 5, kwd2=6)

 

keyword only 특성의 매개변수 값 설정 오류

 

물론 사용 목적에 따라 아래와 같이 Keyword Only 특성 만을 갖는 매개변수 정의 및 사용도 가능하다.

 

# python 3.9.5

def func_1(*, kwd1, kwd2):
    print(kwd1, kwd2)

func_1(kwd1='hello', kwd2='world')

 

keyword only 특성의 매개변수 정의 2