2015-04-02 107 views
1

某些python內置方法(例如vars)被某些相同的本地變量名稱「隱藏」。如何調用「隱藏」內置方法?如何查看內置的「隱藏」python?

我是在調試模式下使用python -m pdb XXX.py,並不能看到__builtins__字典隱藏內置方法(vars): (Pdb) dir(__builtins__) ['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']

回答

7

您可以使用特殊__builtins__模塊:

>>> __builtins__.vars 
<built-in function vars> 

>>> __builtins__.vars() 
..ouput snipped.. 

如果您使用Python調試器(python -m pdb script.py),__builtins__似乎顯示爲dict,那麼請使用:

(Pdb) __builtins__['vars'] 
<built-in function vars> 

注意,這是一個破解,2領先&尾隨下劃線的是Python的約定「內部使用,不要在腳本中不能使用」。 Python可以讓你訪問這個,但是這個巨大的力量帶來了巨大的責任,因爲它使你能夠做到非常聰明,非常愚蠢的事情!


請記住,在Python函數就像任何其他變量,那麼另一種方法是將保存以前vars功能:

# No parens! We don't want to call the function, just assign it 
>>> builtin_vars = vars 
>>> vars = 'a string' 
>>> builtin_vars 
<built-in function vars> 
>>> vars 
'a string' 

然而,迄今爲止最好的解決方案是不覆蓋這些變量;-)大多數編輯應該突出顯示這些變量,因此您可以輕鬆識別最常被覆蓋的變量(varsstrlist)。經驗告訴我,你遲早會混淆,並導致難以調試的錯誤,所以才說「NO」 ;-)

你可以得到所有這些內置的完整列表插件與dir()功能:

>>> dir(__builtins__) 
+0

我想說['builtins'(https://docs.python.org/3/library/builtins.html)是一個好主意,因爲它是'模塊有用爲對象提供與內置值相同的名稱,但也需要內置該名稱 – Navith 2015-05-11 05:49:33