一些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']
答案 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'
然而,到目前为止,最好的解决方案是不要覆盖这些变量;-)大多数编辑都应该突出显示这些变量,这样您就可以轻松识别最常被覆盖的变量(vars
,str
,{{ 1}})。经验告诉我迟早你会感到困惑,会导致难以调试的错误,所以只说“不”; - )
您可以使用list
函数获取所有这些内置函数的完整列表:
dir()