2012-04-12 167 views
5

如果我需要一個for循環蟒蛇當你不需要Python中的索引時,你如何做一個For循環?

for i in range(1,42): 
    print "spam" 

但不要使用「我」的東西pylint的抱怨未使用的變量。我應該如何處理?我知道你可以這樣做:

for dummy_index in range(1,42): 
    print "spam" 

但這樣做對我來說似乎很奇怪,有沒有更好的方法?

我在Python中很新,所以原諒我,如果我失去了明顯的東西。

+1

這是非常主觀的。使用前綴'_'或'dummy',或者決定不同的方案,並相應地設置PyLint的'--dummy-variables-rgx'選項(例如'unused_')。 – 2012-04-12 11:00:07

+0

實際上,由於使用了「i」,並且它是'for'語句中語法的必要部分,所以周圍唯一的_dummy_事物是pylint本身。我建議把它作爲pylint項目中的錯誤報告。 – jsbueno 2012-04-12 13:32:50

回答

5

沒有「自然」的方式循環ň次無Python中的計數器變量,你不應該訴諸醜陋的黑客只是沉默的代碼分析工具。

在你的情況我建議下列之一:

  • 就忽略pylint的警告(或過濾報告單字符變量警告)
  • 配置pylint的忽略命名i變量,是通常只用於for循環。
  • 馬克使用前綴,可能使用默認_(它比dummy少分心)未使用的變量
10
for _ in range(1,42): 
    print "spam" 
+0

認爲它可能會識別它,因爲它是傳統上使用的,當你沒有使用變量。 – jamylak 2012-04-12 10:55:31

+6

+1:使用默認設置,PyLint不會抱怨以「dummy」或「_」開頭的未使用變量。使用「\ _」來存儲不需要的值在Python中是很常見的(例如'foo,_ = func_returning_tuple()'說了這麼多,我寧願'_i'比普通的'_'。 – 2012-04-12 10:57:01

+6

注意:當使用'_'同樣使用['gettext'](http://docs.python.org/library/gettext.html)庫(或者認爲將來可能會使用它)會導致問題.Gettext使用'_'作爲i18n翻譯函數('_(「翻譯這個文本」)'),但是在上面的循環'_'會突然變爲41,而下一次調用會引發異常。 – 2012-04-12 11:09:30

6

根據pylint documentation

 
--dummy-variables-rgx= 
      A regular expression matching names used for dummy variables (i.e. 
      not used). [current: _|dummy] 

換句話說,如果變量的名稱以下劃線開頭,或用字母dummypylint不會抱怨變量不被使用:

for dummy in range(1, 42): 
    print "spam" 
+0

我給了我的問題解決方案,即時通訊詢問是否有辦法做到這一點,而沒有聲明變量 – Jacxel 2012-04-12 11:14:39

1

通常你可以解決它,就像你的情況一樣:

>>> print "spam\n"*len(range(1,42)) 
+2

但是可能OP想要做更復雜的事情,這是一個簡單的例子... – 2012-04-12 11:00:10

+0

@PaulHiemstra什麼我的意思是,如果沒有未使用的變量,可能會做更復雜的事情。我無法想象在不使用虛擬變量 – luke14free 2012-04-12 11:02:34

+0

的情況下無法解決的設置,但可能存在這樣的解決方法,即時嘗試儘可能少地更改代碼。我正致力於將現有的框架升級到pep8,並希望避免在不必要的地方進行重大更改。 – Jacxel 2012-04-12 11:16:21

0

3個簡單的原因

  1. 沒有通過你的程序沒有辦法循環,而無需使用一個for循環中的計數器變量。
  2. 但是你可以創建一個程序,從index[1]index[2]只需加上if index[1]就完成了。 return index[]+1
  3. 不幸的是,您需要創建一個額外的程序,其效率不如for循環,並且在長程序中效率不高。
相關問題