2013-12-17 95 views
0

通常我不會想這樣做,但在這種情況下,我覺得好像沒有其他選擇。我在pyqt中構建了一個包含許多標籤小部件的程序,其中很多與幾何體上幾個位置的例外情況相同。遞歸聲明變量 - python

我想自動聲明它們,而不是必須逐行聲明它們佔用很多行。它看起來很醜陋。

有沒有辦法說創建像var1,var2,var3等10個變量,而不必逐行聲明它們?

現在我的代碼看起來喜歡 -

self.folderheader1 = QtGui.QLabel(self.folders) 
self.folderheader2 = QtGui.QLabel(self.folders) 
self.folderheader3 = QtGui.QLabel(self.folders) 
self.folderheader4 = QtGui.QLabel(self.folders) 
... 
+3

可以完成你想要使用'setattr'什麼,但你確定要?爲什麼不建立一個'dict'或'list'呢? – mgilson

+6

[將您的數據保留在變量名稱之外](http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html)。 – roippi

回答

8

可以setattr做到這一點,但是我不建議這樣做

for i in range(1,5): 
    setattr(self, 'folderheader%s' % i, QtGui.QLabel(self.folders)) 

相反,我可能會建議一個list

self.folderheaders = [QtGui.Qlabel(self.folders) for _ in range(1, 5)] 

的現在,而不是self.folderheaders1你有self.folderheaders[0]這是不是真的那麼不同...

+0

謝謝你的回答。 'setattr'的作品非常漂亮。但是,我嘗試了你的列表方法,它運行得更好,更清潔!非常感謝你。 –

1

可以使用dict這樣

self.foldersdict = {} 
for i in range(100): 
    self.foldersdict[i] = QtGui.QLabel(self.folders) 

以後,您可以訪問他們這個樣子,

self.foldersdict[1] 
+1

帶整數鍵的字典?聽起來像列表的食譜。 self.foldersdict = [QtGui.QLabel(self.folders)for _ in xrange(100)] – LiMar