首先,變量名稱只是是的一個字符串。所以,你已經把變量名放在一個列表中。
如果您想查找由每個字符串命名的全局變量,並將這些變量放入列表中,那麼您無法這樣做,因爲您無法將變量放入列表中。變量在Python中不是真實的東西,它們只是(內置的,全局的,本地的或合格的)值的名稱;這是值這是真實的東西。
但是,如果你想查找由每個字符串命名的全局變量,並將每個變量的值放入一個列表中......這很容易。改變這一行:
list.append(line)
...這樣的:
list.append(globals()[line])
然而,你的代碼有許多意味着它不會實際工作的其他問題。您已使用變量r
而不是字符串'r'
作爲您的文件模式,該模式(除非r
碰巧巧妙地保存有效模式字符串)將失敗。你也從來沒有給line
分配任何東西,只是扔掉每個readline
的結果,這意味着你將得到一個試圖訪問它的異常(或一個無限循環或立即退出的循環)。同時,大多數逐行讀取文件的方法(包括f.readline()
)會將換行符保留在字符串的末尾,而且很可能不會有名稱以換行符結尾的變量。
雖然我們在這,但這不是pythonic代碼。你永遠不應該命名變量list
,你應該總是關閉你的文件,空字符串是錯誤的,所以你不需要比較,你應該使用for
循環遍歷集合。
所以:
values = []
with open("text.txt") as f:
for line in f:
values.append(globals()[line.rstrip('\n')])
或者更簡單地說,使用列表理解:
with open("text.txt") as f:
values = [globals()[line.rstrip('\n')] for line in f]
最後,這整個的設計目標聞起來很奇怪,我敢打賭這不是完成你想要完成的任何事情的正確方法。
什麼是「變量名」如果不是字符串?你想查找名稱與每個字符串匹配的全局變量,並將_those_存儲在列表中嗎? (如果是這樣,爲什麼呢?這是一件非常奇怪的事情,這是可行的,我可以解釋,但如果你描述你的目標是什麼,我可以給你一個更好的方法來實現它。) – abarnert
偏題:避免使用'list'作爲變量名稱。 –