복붙노트

[PYTHON] 기본값이 아닌 인수가 기본 인수를 따르지 않는 이유는 무엇입니까?

PYTHON

기본값이 아닌 인수가 기본 인수를 따르지 않는 이유는 무엇입니까?

이 코드가 SyntaxError를 던지는 이유는 무엇입니까?

  >>> 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
... 

해결법

  1. ==============================

    1.모든 필수 매개 변수는 기본 인수 앞에 있어야합니다. 간단히 말해서 그것들은 필수적이지 만, 기본 인자는 그렇지 않다. 구문 적으로 인터프리터는 혼합 모드가 허용되는 경우 어떤 값이 어떤 인수와 일치하는지 결정할 수 없습니다. 인수가 올바른 순서로 주어지지 않으면 SyntaxError가 발생합니다.

    모든 필수 매개 변수는 기본 인수 앞에 있어야합니다. 간단히 말해서 그것들은 필수적이지 만, 기본 인자는 그렇지 않다. 구문 적으로 인터프리터는 혼합 모드가 허용되는 경우 어떤 값이 어떤 인수와 일치하는지 결정할 수 없습니다. 인수가 올바른 순서로 주어지지 않으면 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 참고서                                                                이 함수가 기본 인수를 사용하면 위의 함수 호출을 구문 적으로 올바르게 수정합니다. prove를 호출하는 키워드 인수는 순서가 잘못된 위치 인수를 제공하는 데 유용하지만 기본 인수와 함께 누락 인수도 건너 뛸 수 있습니다.

  2. ==============================

    2.

    SyntaxError: non-default argument follows default argument
    

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

    그러나 파이썬 3에서는 다음을 할 수 있습니다 :

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

    이는 x와 y 키워드 만 만들어서 다음과 같이 할 수 있습니다 :

    fun1(x=2, y=2)
    

    더 이상 애매 모호하지 않기 때문에이 방법이 효과적입니다. 참고 fun1 (2, 2) (기본 인수를 설정합니다) 여전히 할 수 없습니다.

  3. ==============================

    3.여기서 두 가지 사항을 명확히하겠습니다.

    여기서 두 가지 사항을 명확히하겠습니다.

    def 예제 (a, b, c = 없음, r = "w", d = [], * ae, ** ab) :

    (a, b)는 위치 매개 변수

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

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

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

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

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

    기본 값을 저장할 때 인자가 정의되지 않는다. 파이썬이 계산한다. 함수를 정의 할 때 기본값을 저장합니다.

    c 및 d가 정의되지 않았거나 존재하지 않을 때 발생합니다 (함수가 실행될 때만 존재 함)

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

  4. ==============================

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

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

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

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

  5. ==============================

    5.그것은 파이썬 인수 구문 분석기의 작업 machanism에 의해 결정되었습니다. 여기에는 마법이 없습니다.

    그것은 파이썬 인수 구문 분석기의 작업 machanism에 의해 결정되었습니다. 여기에는 마법이 없습니다.

  6. from https://stackoverflow.com/questions/16932825/why-cant-non-default-arguments-follow-default-arguments by cc-by-sa and MIT license