이 이상한 결장 행동은 무엇을하고 있습니까?
저는 Python 3.6.1을 사용하고 있는데 매우 이상한 것을 발견했습니다. 검색하는 데 오랜 시간이 걸리는 간단한 사전 할당 오타가 있습니다.
context = {}
context["a"]: 2
print(context)
산출
{}
코드는 무엇을 context["a"]: 2
하고 있습니까? SyntaxError
IMO가 필요한 경우를 제기하지 않습니다 . 처음에는 슬라이스를 만들고 있다고 생각했습니다. 그러나 입력 repr(context["a"]: 2)
하면 SyntaxError
. 나는 또한 context["a"]: 2
콘솔에 입력 했지만 콘솔은 아무것도 인쇄하지 않았습니다. 나는 그것이 돌아 왔을지도 모른다고 생각 None
했지만 나는 그렇게 확신하지 않는다.
또한 한 줄의 if 문이 될 수 있다고 생각했지만 올바른 구문이 아니어야합니다.
또한, context["a"]
를 제기한다 KeyError
.
나는 당황합니다. 무슨 일이야?
실수로 구문 상 올바른 변수 주석을 작성했습니다 . 이 기능은 Python 3.6에서 도입되었습니다 ( PEP 526 참조 ).
변수 주석은 주석이 달린 할당의 일부로 구문 분석되지만 할당 문은 선택 사항입니다 .
annotated_assignment_stmt ::= augtarget ":" expression ["=" expression]
따라서 context["a"]: 2
context["a"]
주석 대상입니다.2
주석 그 자체입니다context["a"]
초기화되지 않은 상태로 남아 있습니다.
PEP는 "어노테이션의 대상은 적어도 구문 적으로 유효한 단일 할당 대상이 될 수 있습니다 (이와 함께 수행 할 작업은 유형 검사기에게 달려 있음)"라고 명시합니다. 이는 키가 존재하지 않아도됨을 의미합니다. 주석이 추가되었습니다 (따라서 아니오 KeyError
). 다음은 원래 PEP의 예입니다.
d = {}
d['a']: int = 0 # Annotates d['a'] with int.
d['b']: int # Annotates d['b'] with int.
일반적으로 주석 표현식 은 Python 유형으로 평가 되어야 합니다. 주석의 모든 주요 사용은 유형 힌팅이지만 강제되지는 않습니다. 주석은 결과의 유형 또는 값에 관계없이 유효한 Python 표현식이 될 수 있습니다 .
보시다시피, 현재 유형 힌트는 mypy 와 같은 정적 유형 검사기가 없다면 매우 관대하고 거의 유용하지 않습니다 .
참고 URL : https://stackoverflow.com/questions/48323493/what-is-this-odd-colon-behavior-doing
'developer tip' 카테고리의 다른 글
HTML 이메일 디자인에 대한 어떤 지침이 있습니까? (0) | 2020.08.24 |
---|---|
CSS : x 축에 고정 된 위치이지만 y가 아님? (0) | 2020.08.24 |
sed, awk 또는 gawk를 사용하여 일치하는 항목 만 인쇄하는 방법은 무엇입니까? (0) | 2020.08.24 |
log4net에서 publickeytoken을 계속 변경하려면 어떻게해야하나요? (0) | 2020.08.24 |
Semaphore와 SemaphoreSlim 중에서 어떻게 선택합니까? (0) | 2020.08.24 |