2015-04-02 118 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