이 이상한 대장 행동은 무엇을 하는 것입니까?
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는 "주석의 대상은 적어도 구문적으로 (이것으로 무엇을 할 것인가는) 유효한 단일 할당 대상이 될 수 있다"고 언급하며, 이는 주석을 달기 위해 키가 존재할 필요가 없음을 의미합니다(따라서 no).KeyError
다음은 원래 PEP의 예입니다.
d = {}
d['a']: int = 0 # Annotates d['a'] with int.
d['b']: int # Annotates d['b'] with int.
일반적으로 주석 표현식은 Python 유형으로 평가되어야 합니다. 주석의 주요 사용은 모두 유형 암시이지만 강제되지는 않습니다.주석은 결과의 유형이나 값에 관계없이 유효한 Python 식일 수 있습니다.
보시다시피, 현재 유형 힌트는 매우 관대하며 mypy와 같은 정적 유형 검사기가 없는 한 거의 유용하지 않습니다.
주석은 자동으로 저장됩니다.__annotations__
그것은 받아쓰기입니다.위해서x: y
.y
올바른 표현식이어야 합니다.y
또는 오른쪽에 있는 것이 무엇이든.:
평가해야 합니다.반면에x
최소한 키가 될 수 있어야 하므로 해시 가능합니다.
게다가, LHS는 집합이 될 수 없습니다. 집합은 씻을 수 없기 때문입니다.>>> {2}: 8
SyntaxError: illegal target for annotation
도 없음: 목록없음:>>> [2]: 8
[2]: 8 SyntaxError: only single target (not list) can be annotated
튜플 아님:
>>> (2,3): 8
(2,3): 8 SyntaxError: only single target (not tuple) can be annotated
언급URL : https://stackoverflow.com/questions/48323493/what-is-this-odd-colon-behavior-doing
'programing' 카테고리의 다른 글
SQL Server Management Studio에서 헤더로 결과 저장 (0) | 2023.05.27 |
---|---|
Objective-C에서 "instance로 전송된 인식되지 않는 선택기" 오류 (0) | 2023.05.27 |
각도 예외:알려진 기본 속성이 아니므로 'ngForIn'에 바인딩할 수 없습니다. (0) | 2023.05.27 |
작업 태그를 이클립스의 현재 프로젝트로 제한하려면 어떻게 해야 합니까? (0) | 2023.05.27 |
FormControlName과 FormControl의 차이점은 무엇입니까? (0) | 2023.05.27 |