<질문>
이 코드에서 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
어느 것이x
과y
키워드 만 가능하므로 다음을 수행 할 수 있습니다.
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"입니다.
'개발 > Python' 카테고리의 다른 글
파이썬에 내장 식별 기능이 있습니까? (0) | 2021.01.21 |
---|---|
Python에서 내 모듈을 가져올 수 없습니다. (0) | 2021.01.21 |
Python에서 병렬 프로그래밍을 수행하는 방법은 무엇입니까? (0) | 2021.01.21 |
PyPlot을 사용하여 부드러운 선 플로팅 (0) | 2021.01.15 |