如何看待"隐藏" python内置?

时间:2015-04-02 14:02:58

标签: python

一些python内置方法(例如vars)是"隐藏"通过一些相同的局部变量名称。如何调用"隐藏"内置方法?

我使用python -m pdb XXX.py处于调试模式,无法在vars字典中看到隐藏的内置方法(__builtins__): (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']

1 个答案:

答案 0 :(得分: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>

请注意,这是 hack ,2领先&amp;尾部下划线是“内部使用,不在脚本中使用”的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'

然而,到目前为止,最好的解决方案是不要覆盖这些变量;-)大多数编辑都应该突出显示这些变量,这样您就可以轻松识别最常被覆盖的变量(varsstr,{{ 1}})。经验告诉我迟早你感到困惑,导致难以调试的错误,所以只说“不”; - )

您可以使用list函数获取所有这些内置函数的完整列表:

dir()