#python #anaconda #jupyter-notebook #visual-code #html #css #javascript #http

제목[re][re][re]파이썬 IDLE 셀에서 input(prompt=) 실행 오류에 관하여 다시 질문드립니다.2022-03-23 03:57
작성자

파이썬에서 함수의 입력값을 전달하는 방식은 아래 두 가지가 있습니다

1. 키워드 인자 (keyword argument)

2. 위치 인자 (positional argument)


input("")은 입력값을 위치 인자로 전달한 것이고,

input(prompt="")은 키워드 인자로 전달한 것입니다.


위치 인자로 전달하면 해당 입력값의 위치에 해당하는 입력변수에 자동으로 매핑이 되고,

키워드 인자로 전달하면 사용자가 직접 어느 입력변수에 해당하는 값인지 지정할 수 있습니다.


예를 들어 아래와 같은 함수가 있을 때

def sub(a, b):

return b-a


sub(1, 3)을 호출하면 각각 위치에 맞게 a에 1이, b에는 2가 대입됩니다.

이런 경우가 위치 인자로 입력값을 전달한 것입니다.

위치 인자로 전달할 경우 순서를 통해 값을 구분하므로 입력값의 순서가 굉장히 중요합니다.


반면, sub(a=1, b=3)은 키워드 인자로 입력값을 전달한 것입니다.

이때는 호출 시에 이미 각각의 입력값이 어느 매개변수에 해당하는지 명시했기 때문에

sub(b=3, a=1)과 같이 입력 순서를 뒤집어도 같은 결과가 출력되게 됩니다.


위의 예시로 든 함수의 경우 두 방식 중 어느 것을 사용해도 오류가 발생하지 않습니다.



그러나 매개변수에 '/'가 포함된 경우 키워드 인자 사용이 제한되게 됩니다.

다음의 예시를 보면

add_1과 add_2는 add_2함수의 매개변수 뒤에 '/'가 추가된 것 빼고는 동일한 함수입니다.

하지만 동일하게 키워드 인자로 함수를 호출해보면 add_2(x=1, y=2)에서 오류가 발생하는 것을 볼 수 있습니다.


에러 코드를 보면 x와 y는 위치전용인자이기 때문에 키워드 인자로 받을 수 없다고 적힌 것을 알 수 있습니다.

(함수 정의에서 매개변수에 '/'가 포함된 경우 '/'앞의 매개변수들은 키워드 인자로 받을 수 없습니다)

따라서 이 경우에는 add_2(1,2)와 같이 위치 인자로만 호출해야만 하는 것입니다.


----------------------------------------------------------------------------------------------------------------------------------------------


그럼 다시 input()함수로 돌아가서 input 함수의 정의를 살펴보면


입력 매개변수는 prompt이고 디폴트값은 None이며, 뒤에 '/'가 추가되어 앞의 prompt를 위치전용인자로 강제한 것을 볼 수 있습니다.

따라서 input(prompt="")처럼 사용할 경우 에러가 발생하는 것입니다.



다만 주피터에서는 정상 작동되는 것이 저도 의아해 살펴보니

IDLE에서의 input 함수와 기능은 같지만 매개변수 부분이 다르게 정의되어있는 것을 볼 수 있었습니다.

주피터가 ipython 기반이라 비롯된 차이인 것 같습니다.

댓글