2013-12-17 15 views
1

我想創建一個Python系統,它允許我創建一個名爲(用戶)總數的列表,'user'是總數前的用戶名。然而,這是主觀的,因爲任何用戶名的帳戶都可以在我的程序中進行。如何使用%s來命名一個列表

我試圖使用 %stotal = [''] %user 但是,這出現了語法錯誤。我將如何設法做到這一點?

+5

使用字典。不要試圖將數據放入變量名稱中。 – Hyperboreus

回答

2

你不能在python中做那種元編程! (不與語法你貼) 但相反,您可以創建用戶名索引列表的詞典:

total = {} 
total['username1'] = [''] #list for this username total 
total['username2'] = [''] 

+3

你可以,但在大多數情況下,你不應該。 – Hyperboreus

+0

當然可以,但不能按照發布的方式 –

+1

啊我看到了,那麼對於用戶名我可以使用%s並以這種方式將它們添加到字典中? – user3112327

0

可能。希望看到如何有助於說明爲什麼,如Hyperboreus所說,這不是一個好主意。

如果您在交互式Python環境中執行dir(),您將獲得當前作用域中可用的名稱列表。總是會有一個叫做__builtins__的模塊,它暴露了builtins模塊中的所有函數和常量。這些函數和常量被定義爲與全局名稱空間中Python會話開始時可用的完全相同的函數和常量,您可以使用內置函數globals()來查看這些函數和常量。

根據Python data model,每個Python對象都有一個名爲__dict__的元素,它是一個dictionary object,其鍵是成員名稱。如果obj是當前作用域中某個Python對象的名稱,則obj.__dict__["keyname"]將訪問您可以更簡單地通過obj.keyname獲得的相同成員。

所以把這個在一起,你可以在__builtins__.__dict__直接設置鍵/值對:

>>> __builtins__.__dict__["testvarname"] = "testval" 
>>> print testvarname 
testval 

呼!在這裏獲得相當抽象很快。這對於根據用戶輸入定義行爲或者直到運行時纔可能知道的其他東西可能是有用的......但是你可能會看到你是如何通過很複雜的工作來到達那裏的,並且繞過了正常的規則Python着手嘗試幫助您保持程序的組織性和易於理解。 xndrme的答案很可能是解決您面臨的更大問題的更直接的方法。

+1

這是我的答案! :) –

+1

沒問題,只是很有趣;) –

相關問題