이 코드 조각이 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
...
답변
모든 필수 매개 변수는 기본 인수 앞에 배치해야합니다. 기본 인수는 필수는 아니지만 필수이기 때문에 간단합니다. 구문 적으로, 혼합 모드가 허용 된 경우 인터프리터가 어떤 값이 어떤 인수와 일치하는지 결정하는 것은 불가능 합니다. SyntaxError
인수가 올바른 순서로 제공되지 않으면 A 가 발생합니다.
함수를 사용하여 키워드 인수를 살펴 보겠습니다.
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”)
- 키워드 전용 매개 변수, 즉 (* args)
- var-keyword 매개 변수, 즉 (** kwargs)
def example(a, b, c=None, r="w" , d=[], *ae, **ab):
(a, b)는 위치 매개 변수입니다
(c = 없음)은 선택적 매개 변수입니다.
(r = “w”)는 키워드 매개 변수입니다
(d = [])는 목록 매개 변수입니다.
(* ae)는 키워드 전용입니다
(** ab)는 var-keyword 매개 변수입니다.
- 이제 다음과 같은 것을 시도하는 것이 보조입니다.
def example(a, b, c=a,d=b):
기본값이 저장되면 인수가 정의되지 않습니다. 파이썬은 함수를 정의 할 때 기본값을 계산하고 저장합니다
c와 d는 정의되지 않았으며, 이런 일이 발생하면 존재하지 않습니다 (함수가 실행될 때만 존재합니다)
“a, a = b”는 매개 변수에서 허용되지 않습니다.
답변
클라이언트 코드가 두 개만 제공 할 수 있도록 필요한 인수 (기본값이없는 인수)가 시작에 있어야합니다. 선택적 인수가 시작된 경우 혼란 스러울 수 있습니다.
fun1("who is who", 3, "jack")
첫 번째 예에서 무엇을 할 것입니까? 마지막으로 x는 “who is who”이고, y는 3이고 a = “jack”입니다.