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.