codememo

기본값이 아닌 인수는 기본값 인수를 따를 수 없는 이유는 무엇입니까?

tipmemo 2023. 7. 13. 00:36
반응형

기본값이 아닌 인수는 기본값 인수를 따를 수 없는 이유는 무엇입니까?

이 코드에서 구문 오류가 발생하는 이유는 무엇입니까?

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

다음 코드가 눈에 보이는 오류 없이 실행되는 동안:

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

필요한 모든 매개 변수는 기본 인수 앞에 배치해야 합니다.기본 인수는 필수 사항인 반면, 단순히 필수 사항이기 때문입니다.구문적으로, 혼합 모드가 허용되는 경우 인터프리터가 어떤 값이 어떤 인수와 일치하는지 결정하는 것은 불가능할 것입니다.aSyntaxError인수가 올바른 순서로 지정되지 않은 경우 발생합니다.

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

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 조
이 함수는 위 함수 호출에 대해 구문적으로 올바른 기본 인수를 사용합니다.호출하는 키워드 인수는 순서가 잘못된 위치 인수를 제공하는 데 유용하지만, 기본 인수와 결합하여 누락된 인수를 "넘기는" 데도 사용할 수 있습니다.

SyntaxError: non-default argument follows default argument

기본값이 아닌 인수가 뒤에 오기 때문에 기본값을 사용할 수 없으므로 기본값을 사용할 수 없습니다.

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

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

그래서x그리고.y키워드만 입력하면 다음 작업을 수행할 수 있습니다.

fun1(x=2, y=2)

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

여기서 두 가지 점을 분명히 하겠습니다.

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

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

(a,b) 위치 매개변수

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

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

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

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

(**ab)은 var-interval 매개 변수입니다.

  • 이제 부차적인 것은 제가 이런 것을 시도한다면:def example(a, b, c=a,d=b):

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

c와 d는 정의되지 않으며, 존재하지 않습니다. 이 경우(함수가 실행될 때만 존재합니다).

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

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

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

첫 번째 예에서는 어떤 역할을 할까요?마지막으로 x는 "who is who", y는 3이고 = "jack"입니다.

언급URL : https://stackoverflow.com/questions/16932825/why-cant-non-default-arguments-follow-default-arguments

반응형