2016-08-15 134 views
0

我試圖用不同的值循環類似的變量名稱,但發現無法這樣做。我附上了下面的代碼。你能否建議我循環做什麼以獲得版本1代碼的效果?非常感謝。Python 3.5:通過循環更改變量名稱來分配變量值

#Version 1: The intended effect 
def test(): 

    global v1, v2, v3 

    v1 = 1 
    v2 = 2 
    v3 = 3 

    print (v1) 
    print (v2) 
    print (v3) 

if __name__ == "__main__": 
    test() 

和:

#Version 2: The loop I tried but failed 
def test(): 

    global v1, v2, v3 

    for i in range (1,3): 
     "v" + str(i) = i 
     print ("v" + str(i)) 

if __name__ == "__main__": 
    test() 
+0

您試圖將「str」分配給一個名稱(即變量)。這是不正確的。想象一下,如果你已經完成了「v1」= 1' –

+1

你有什麼理由不能使用列表? –

+1

使用字典。不要使用全局變量。 –

回答

2
# Version 3: What you should be doing 

def test(): 
    v = [] 
    for i in range(1, 3): 
     v.append(i) 
     print(v[i-1]) 

if __name__ == '__main__': 
    test() 

全球範圍內,「變量變量」,以及各種其他的解決方案是多餘的,一般醜陋(因爲它們最終會導致難以調試破損在更大的應用程序)爲此。只需使用list這種類型的東西。

# Version 4: Bonus list comprehension version 

def test(): 
    return [i for i in range(1, 3)] # or list(range(1, 3)) 
+0

大家好,感謝您的及時回覆。但我正在尋找的是通過類似的全局變量的循環。重點是做「v」+ str(i)的部分,打印只是爲了說明結果。現在我正在編寫一個代碼來開發一個系列中的30多個全局變量,並且每個變量都將被分配到一個類似算法的tkinter小部件,因此尋找一種循環方式,而不是一直重複類似代碼。對此有何想法?再次感謝。 –

+0

你爲什麼使用全局變量?你幾乎不需要全球範圍。 (我從未想過在職業生涯中任何時候我都需要它)。另外,如果你想循環這些並且它們都是相關的(例如,你可能認爲把它們存儲爲'v1','' v2',...,'vN'),那麼**應該告訴你它應該是一個列表**! –