一些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']
您可以使用特殊__builtins__模块:
>>> __builtins__.vars
<built-in function vars>
>>> __builtins__.vars()
..ouput snipped..
Run Code Online (Sandbox Code Playgroud)
如果你正在使用Python调试器(python -m pdb script.py),__builtins__似乎显示为dict,所以使用:
(Pdb) __builtins__['vars']
<built-in function vars>
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个hack,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'
Run Code Online (Sandbox Code Playgroud)
然而,迄今为止最好的解决方案是不覆盖这些变量;-)大多数编辑应该突出这些,所以你可以很容易地识别最常用的覆盖那些(vars,str,list).经验告诉我,迟早你会感到困惑,并且会导致难以调试的错误,所以只需说"不";-)
您可以使用以下dir()函数获取所有这些内置函数的完整列表:
>>> dir(__builtins__)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |