programing

이 이상한 대장 행동은 무엇을 하는 것입니까?

lastcode 2023. 5. 27. 11:32
반응형

이 이상한 대장 행동은 무엇을 하는 것입니까?

Python 3.6.1을 사용하고 있는데 매우 이상한 점을 발견했습니다.간단한 사전 과제 오타가 있어서 찾는 데 시간이 오래 걸렸습니다.

context = {}
context["a"]: 2
print(context)

산출량

{}

코드가 무엇입니까?context["a"]: 2하고 있나요? 그것은 그것을 제기하지 않습니다.SyntaxErrorIMO가 되어야 할 때.처음에 저는 그것이 조각을 만드는 것이라고 생각했습니다.그러나, 타이핑하는 중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

반응형