2011-09-12 55 views

回答

5

所有的全局變量或只是用戶定義的變量?

>>> globals() 
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None} 
>>> x=2 
>>> globals() 
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'x': 2, '__doc__': None, '__package__': None} 

爲了讓你定義自己的事情,似乎你可以從這個列表中篩選出的所有鍵值對,其密鑰不匹配正則表達式"__.*?__$"

UPDATE

這是一個更好的答案:

$ python 
Python 2.7.1 (r271:86832, Jun 5 2011, 15:52:25) 
[GCC 4.2.1 (Apple Inc. build 5659)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> x = 3 
>>> import re 
>>> [name for name in dir() if not re.match(r'__.*?__$', name)] 
['re', 'x'] 

在這裏,我已經排除開頭,以兩個下劃線結束特殊的名字,所以如果你使用了他們自己,他們將不會顯示。正則表達式的末尾的$以防止接受__abc__1。此外,我切換到dir(),它在當前範圍內獲取符號,但不一定是全局符號,但似乎更清晰。它不會像globals()那樣添加領先列表理解變量。

+0

謝謝!用戶定義應該更有用 – psihodelia

+0

@psihodelia對,編輯答案。如果你喜歡,我可以添加代碼來過濾字典。 –

+0

謝謝,我發佈了一個關於它的新問題 – psihodelia

6

使用dir()

例如,

>>> x = 666 
>>> dir() 
['__builtins__', '__doc__', '__name__', '__package__', 'x'] 
1

您可以檢查globals(),顯示所有的模塊級的變量,或locals(),這是當地的範圍。在提示中,這些是相同的。此外,vars()顯示所有可用的名稱,不管你在哪裏。

2

您是否已啓用readline?你可以查看你的翻譯歷史,找到你想要的。我認爲這比挖掘globals()dir()容易。

相關問題