我犯了如下错误:
>>> list = ['a', 'b', 'c']
但现在我想使用内置函数list()
。如您所见,listname list
与内置函数list()
之间存在命名冲突。
如果不重新启动Python shell,如何使用list
作为内置函数而不是变量?
答案 0 :(得分:30)
第一步:将列表重新绑定为其他名称
lst = list
第二步:删除list
变量
del list
第三步:不要再做
我比__builtins__.list
更喜欢这个,因为它可以保存输入内容,而且你还没有留下名为list
的变量。但是,最好完全避免这个问题。在编写生产代码时,请始终记住 not ,以使变量的名称与内置函数相同。
答案 1 :(得分:28)
使用__builtins__.list
或__builtins__['__list__']
(取决于具体情况),或者只是再次删除list
(del list
)。
不需要进口:
>>> __builtins__.list
<type 'list'>
__builtins__
的存在是一个CPython实现细节;在__main__
模块中,它是一个模块,在其他任何地方它都是模块__dict__
字典。 Jython,IronPython和PyPy可能会选择不提供此功能。使用__builtin__
module用于这些平台,或用于兼容Python 3的实现builtins
module:
>>> import __builtin__
>>> __builtin__.list
<type 'list'>
答案 2 :(得分:8)
不要使用内置函数或类型作为变量名。就这么简单,语言不是那个意思。这样做没有任何意义。
不仅如此 - 但使用名称“list”列表是非常模糊的,我怀疑它甚至可以在任何实际代码中远程使用。
为什么你应该不 永远影子内置有几个原因。下面是一些比较严重的问题:
答案 3 :(得分:4)
要修复错误,还有另一种选择 - 如果我们记得内置的“函数”list()
实际上是一个类,那么我们就可以这样做:
list = type([])
答案 4 :(得分:2)
在py2x中使用__builtin__.list
:
>>> import __builtin__
>>> __builtin__.list
<type 'list'>
请勿使用__builtins__.list
:
来自docs:
CPython实施细节:用户不应触及
__builtins__
;它 严格来说是一个实现细节。想要覆盖值的用户 在builtins
命名空间中应导入__builtin__
(否's') 模块并适当地修改其属性。
for py3x:
>>> import builtins
>>> builtins.list
<class 'list'>
答案 5 :(得分:1)
它始终以__builtins__.list
:
>>> __builtins__.list
<class 'list'>
>>> list = [1, 2, 3]
>>> __builtins__.list
<class 'list'>
如果您碰巧重新 ,那么您就没有选择。
您还可以使用模块__builtin__
(或builtins
,不带下划线,在Python 3中),但您必须导入它。但是这些是拼写同一个东西的不同方式,而不是一个额外的选择 - 修改一个会影响两者:
>>> import builtins
>>> builtins.list
<class 'list'>
>>> builtins.list = [1, 2, 3]
>>> builtins.list
[1, 2, 3]
>>> __builtins__.list
[1, 2, 3]
答案 6 :(得分:0)
是的,其他人在上面说,不要使用内置名称作为变量名称。这适用于list
,dict
等
同样,正如其他人所说,您可以通过list
访问__builtins__.list
类型。因此,如果您需要致电list
,只要您还没有反弹__builtins__.list
,您仍然可以找到它。
重要的是,list
是一个名称。你将它反弹到一个列表的实例。如果您希望list
再次表示<type 'list'>
,请重新重新绑定。在Python 2.7中:
>>> __builtins__.list
<type 'list'>
>>> list
<type 'list'>
>>> list = [1, 2, 3]
>>> list
[1, 2, 3]
>>> fred = list
>>> fred
[1, 2, 3]
>>> list = __builtins__.list
>>> list
<type 'list'>