for 루프에서 유형에 주석을다는 방법


93

for루프 에서 변수 유형에 주석을 달고 싶습니다. 나는 이것을 시도했다 :

for i: int in range(5):
    pass

그러나 분명히 작동하지 않았습니다.

내가 기대하는 것은 PyCharm 2016.3.2에서 자동 완성 기능입니다. 다음과 같은 사전 주석 :

i: int
for i in range(5):
    pass

도움이되지 않습니다.

PS 사전 주석은 PyCharm> = 2017.1에서 작동합니다.


참고 : 일반적으로 유형은 범위 함수에서 추론되므로 필요하지 않습니다 (모든 내부 선언 변수와 관련이 있음)
— gdoumenc

답변:


124

PEP 526 에 따르면 다음은 허용되지 않습니다.

또한 또는 문에 사용 된 변수에 주석을 달 수 없습니다forwith . 튜플 압축 해제와 유사한 방식으로 미리 주석을 달 수 있습니다.

루프 전에 주석을 추가하십시오.

i: int
for i in range(5):
    pass

PyCharm 2018.1 이상은 이제 루프 내부의 변수 유형을 인식합니다. 이전 PyCharm 버전에서는 지원되지 않았습니다.


1
나는 그것을 시도했지만 마지막 안정적인 PyCharm에서 작동하지 않는 것 같습니다. 적어도 자동 완성 기능이 없습니다.
— grepcake 17.01.13

2
저는 PyCharm 2018.1을 사용하고 있으며 이제이 양식을 인식합니다.
— philologon

2
트윗 담아 가기 주의 해 주셔서 감사합니다. 그에 따라 답변을 업데이트했습니다.
— alecxe

3
그러나 검사 정보가있을 것 Local variable 'i' value is not used입니다.
— Simin Jie

1
i인은 i: int아직도 당신이 사용하는 경우에도 사용되지 않습니다 i루프에서. 나는 이것이 이런 종류의 주석에 대한 결함이라고 생각합니다.
— Simin Jie

38

이 솔루션이 PEP와 호환되는지 아니면 PyCharm의 기능인지는 모르겠지만 이렇게 작동하도록 만들었습니다.

for i in range(5): #type: int
  pass

Pycharm Community Edition 2016.2.1을 사용하고 있습니다.


2
감사합니다.하지만 저는 PEP 526 옵션을
— 고수하겠습니다

PEP 526을 준수하지는 않지만 PyCharm (적어도 2017.2.1 현재)에서 작동하며 Python 3.0-3.5 (Python 3.6에 도입 된 사전 주석 구문을 지원하지 않음)에서도 작동한다는 추가 이점이 있습니다.
— phoenix

4
참고 :이 형식은 PEP 484에서 명시 적으로 허용 / 언급되었습니다 (python 2.7 호환 가능)
— Claude

1
이것은 또한 PEP 484
— Marco

이 양식은 for / enumerate 루프 및 PyCharm 2018에서도 작동합니다. 예for index, area in enumerate(area_list): # type: int, AreaInfo
— simpleuser

13

이것은 PyCharm에서 잘 작동합니다 (Python 3.6 사용).

for i in range(5):
    i: int = i
    pass

요청 된 내용을 정확히 수행하고 현재 허용되는 것과는 달리 다른 오류 및 / 또는 경고를 표시하지 않기 때문에 이것이 허용되는 대답이어야한다고 생각합니다.
— Jani Kärkkäinen

2
당신이 for 루프에서 변수를 재정의하는 경우 MyPy 실제로 불평
— 조반니 디 밀리아에게

3
변수를 재정의하지 마십시오. i: int충분하고 어떤 불만도 얻지 못할 것입니다.
— user136036

-4

당신이 할 수 없다는 것을 제외하고는 여기에 유용한 답변은 없습니다. 받아 들여지는 대답조차도 유효한 파이썬 구문이 아닌 PEP 526 문서의 구문을 사용합니다. 입력하려고하면

x: int

구문 오류라는 것을 알 수 있습니다.

다음은 유용한 해결 방법입니다.

for __x in range(5):
    x = __x  # type: int
    print(x)

귀하의 작업을 수행 x. PyCharm은 유형을 인식하고 자동 완성이 작동합니다.


10
적어도 파이썬 3.6에서는 유효한 구문입니다. PEP 526
— grepcake 17
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.