개발/Python

[파이썬] 기본이 아닌 인수가 기본 인수를 따를 수없는 이유는 무엇입니까?

MinorMan 2021. 1. 21. 08:17
반응형

<질문>

이 코드에서 SyntaxError가 발생하는 이유는 무엇입니까?

  >>> def fun1(a="who is you", b="True", x, y):
...     print a,b,x,y
... 
  File "", line 1
SyntaxError: non-default argument follows default argument

다음 코드는 눈에 띄는 오류없이 실행됩니다.

>>> def fun1(x, y, a="who is you", b="True"):
...     print a,b,x,y
... 

<답변1>

모든 필수 매개 변수는 기본 인수 앞에 있어야합니다. 단순히 필수이기 때문에 기본 인수는 그렇지 않습니다. 구문 상으로는불가능한인터프리터가 혼합 모드가 허용되는 경우 어떤 값이 어떤 인수와 일치하는지 결정할 수 있습니다. ㅏSyntaxError인수가 올바른 순서로 제공되지 않으면 발생합니다.

함수를 사용하여 키워드 인수를 살펴 보겠습니다.

def fun1(a="who is you", b="True", x, y):
...     print a,b,x,y

위와 같이 함수를 선언 할 수 있다고 가정하면 위 선언으로 다음과 같은 (일반) 위치 또는 키워드 인수 호출을 할 수 있습니다.

func1("ok a", "ok b", 1)  # Is 1 assigned to x or ?
func1(1)                  # Is 1 assigned to a or ?
func1(1, 2)               # ?

함수 호출에서 변수 할당을 제안하는 방법, 기본 인수가 키워드 인수와 함께 사용되는 방법.

>>> def fun1(x, y, a="who is you", b="True"):
...     print a,b,x,y
... 

참조 O'Reilly-Core-Python
이 함수는 위의 함수 호출에 대해 구문 상 올바른 기본 인수를 사용합니다. 키워드 인수 호출은 비 순차적 인 위치 인수를 제공 할 수있는 데 유용하지만 기본 인수와 함께 누락 된 인수를 "건너 뛰는"데도 사용할 수 있습니다.


<답변2>

SyntaxError: non-default argument follows default argument

이것을 허용하면 기본값이 아닌 인수가 나오기 때문에 기본값을 사용할 수 없기 때문에 기본 인수가 쓸모 없게됩니다..

그러나 Python 3에서는 다음을 수행 할 수 있습니다.

def fun1(a="who is you", b="True", *, x, y):
    pass

어느 것이xy키워드 만 가능하므로 다음을 수행 할 수 있습니다.

fun1(x=2, y=2)

이것은 더 이상 모호성이 없기 때문에 작동합니다. 당신은 여전히 할 수 없습니다fun1(2, 2)(기본 인수를 설정합니다).


<답변3>

여기서 두 가지 요점을 정리하겠습니다.

  • 첫째, 기본이 아닌 인수는 기본 인수를 따라서는 안됩니다. 즉, 함수에서 매개 변수를 정의하는 순서를 다음과 같이 정의 할 수 없습니다 (a = b, c).
    • 위치 매개 변수 또는 기본값이 아닌 매개 변수 즉, (a, b, c)
    • 키워드 매개 변수 또는 기본 매개 변수 (예 : (a = "b", r = "j"))
    • 키워드 전용 매개 변수 즉 (* args)
    • var-keyword 매개 변수 즉 (** kwargs)

def example(a, b, c=None, r="w" , d=[], *ae, **ab):

(a, b)는 위치 매개 변수입니다.

(c = none)은 선택적 매개 변수입니다.

(r = "w")는 키워드 매개 변수입니다.

(d = [])는 목록 매개 변수입니다.

(* ae)는 키워드 전용입니다.

(** ab)는 var-keyword 매개 변수입니다.

  • 이제 부차적 인 것은 다음과 같은 것을 시도하는 것입니다.def example(a, b, c=a,d=b):

기본값이 저장 될 때 인수가 정의되지 않은 경우 Python은 함수를 정의 할 때 기본값을 계산하고 저장합니다.

c와 d는 정의되지 않았고 존재하지 않습니다. 이런 일이 발생하면 존재하지 않습니다 (함수가 실행될 때만 존재 함).

"a, a = b"는 매개 변수에서 허용되지 않습니다.


<답변4>

필수 인수 (기본값이없는 인수)는 클라이언트 코드가 2 개만 제공 할 수 있도록 시작 부분에 있어야합니다. 선택적 인수가 시작 부분에 있으면 혼란 스러울 것입니다.

fun1("who is who", 3, "jack")

첫 번째 예에서 그것이 무엇을할까요? 마지막으로 x는 "who is who", y는 3, a = "jack"입니다.

반응형