For döngüsünde türlere nasıl açıklama ekleyebilirim


93

Bir fordöngüde bir değişken türüne açıklama eklemek istiyorum . Bunu denedim:

for i: int in range(5):
    pass

Ama belli ki işe yaramadı.

Beklediğim şey PyCharm 2016.3.2'de çalışan otomatik tamamlama. Bunun gibi ön açıklama:

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

yardımcı olmuyor.

PS Ön ek açıklama PyCharm> = 2017.1 için çalışır


Sadece bir açıklama: Normalde, tür, range işlevinden çıkarıldığı için buna ihtiyacınız olmamalıdır (bu, bildirilen tüm dahili değişkenler için geçerlidir)
gdoumenc

Yanıtlar:


124

PEP 526'ya göre buna izin verilmez:

Ek olarak, bir forveya with ifadesinde kullanılan değişkenlere açıklama eklenemez ; paketten çıkarmaya benzer şekilde önceden açıklama eklenebilir

Döngüden önce not ekleyin:

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

PyCharm 2018.1 ve üstü artık döngü içindeki değişkenin türünü tanıyor. Bu, eski PyCharm sürümlerinde desteklenmiyordu.


1
Denedim ama son kararlı PyCharm'da çalışmıyor gibi görünüyor. En azından otomatik tamamlama almıyorum.
grepcake

2
PyCharm 2018.1 kullanıyorum ve şimdi bu formu tanıyor.
philologon

2
@philologon güzel! Uyarı için teşekkürler, cevabı buna göre güncelledi
alecxe

3
Ancak bir inceleme bilgisi olacak Local variable 'i' value is not used.
Simin Jie

1
iİçinde i: inthala kullanmak bile kullanılmayacak idöngü içinde. Bence bu, bu tür bir açıklama için bir kusur.
Simin Jie

38

Bu çözümün PEP uyumlu mu yoksa sadece PyCharm'ın bir özelliği mi bilmiyorum ama bu şekilde çalışmasını sağladım

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

ve Pycharm Community Edition 2016.2.1 kullanıyorum


2
Teşekkür ederim, ancak PEP 526 seçeneğine bağlı
kalacağım

PEP 526 uyumlu olmasa da, bu PyCharm'da çalışır (en azından 2017.2.1 itibariyle) ve ayrıca Python 3.0-3.5'te (Python 3.6'da tanıtılan ön açıklama sözdizimini desteklemez) çalışma avantajına sahiptir.
phoenix

4
Bilginize: Bu formata PEP 484'te açıkça izin verilir / bahsedilir (ayrıca python 2.7 uyumludur)
Claude

1
Bu aynı zamanda PEP 484
Marco

Bu form aynı zamanda for / enumerate döngüleri ve PyCharm 2018 ile de çalışır. Örneğinfor index, area in enumerate(area_list): # type: int, AreaInfo
simpleuser

13

Bu, PyCharm'da benim için iyi çalışıyor (Python 3.6 kullanarak)

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

Sanırım bu, tam olarak talep edilen yanıtı yaptığından ve şu anda kabul edilenin aksine başka hatalar ve / veya uyarılar vermediğinden, bu kabul edilen yanıt olmalıdır.
Jani Kärkkäinen

2
For döngüsündeki değişkeni yeniden tanımlarsanız MyPy gerçekten şikayet eder
Giovanni Di Milia

3
Değişkeni yeniden tanımlamayın. i: intyeterli ve herhangi bir şikayet almayacaksınız.
user136036

-4

Yapamayacağınızı söylemek dışında buradaki yanıtların hiçbiri yararlı değildi. Kabul edilen cevap bile geçerli bir python sözdizimi olmayan PEP 526 belgesindeki sözdizimini kullanır. Yazmaya çalışırsan

x: int

Bunun bir sözdizimi hatası olduğunu göreceksiniz.

İşte yararlı bir çözüm:

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

İle işinizi yapın x. PyCharm, türünü ve otomatik tamamlama çalışmalarını tanır.


10
En azından python 3.6 için geçerli bir sözdizimidir. PEP
526'ya
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.