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.