命名与内置函数冲突

hol*_*lys 16 python list built-in

我犯了一个错误如下:

>>> list = ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

但现在我想使用内置函数list().如您所见,listname list和内置函数之间存在命名冲突list().

list如果不重新启动Python shell,我如何使用内置函数而不是变量?

Vol*_*ity 30

第一步:将列表重新绑定为其他名称

lst = list
Run Code Online (Sandbox Code Playgroud)

第二步:删除list变量

del list
Run Code Online (Sandbox Code Playgroud)

第三步:不要再做了


我更喜欢这个,__builtins__.list因为它可以节省输入,而且你还没有留下名为的变量list.但是,最好完全避免这个问题.在编写生产代码时,请记住不要将变量命名为与内置函数相同的变量.

  • @InbarRose这个问题特别适用于Python解释器shell.使用这些答案中提供的*any*hack在生产代码中将是*疯狂* - 我认为这是在实时解释器之外编写的任何代码. (12认同)
  • `如何在不重新启动Python shell的情况下使用list作为内置函数而不是list变量?`@InbarRose - 这可能是最容易在shell中输入并且还记得提到将现有变量重新绑定到某个东西否则首先......(不只是让`list`回来) (3认同)
  • 这是一个很好的答案.除了你提到的优点之外,它不依赖于CPython实现细节! (2认同)
  • @InbarRose您似乎没有考虑问题的背景. (2认同)

Mar*_*ers 28

使用__builtins__.list__builtins__['__list__'](取决于上下文),或简单地list再次删除(del list).

不需要进口:

>>> __builtins__.list
<type 'list'>
Run Code Online (Sandbox Code Playgroud)

存在的__builtins__是CPython实现细节; 在__main__模块中它是一个模块,在其他任何地方它都是模块__dict__字典.Jython,IronPython和PyPy可能会选择不提供此功能.将__builtin__模块用于这些平台,或者用于兼容Python 3的builtins模块:

>>> import __builtin__
>>> __builtin__.list
<type 'list'>
Run Code Online (Sandbox Code Playgroud)

  • 回复:`__builtins __.list` - 不要这样做.只是因为你不能意味着你应该这样做. (7认同)
  • @FogleBird鉴于OP给出的情况 - 解释器出错,我认为这样做没有任何问题.显然,在文件中编写的任何代码中,情况都不同. (2认同)

Inb*_*ose 9

不要使用内置函数或类型作为变量名.就这么简单,语言不是那个意思.这样做没有任何意义.

不仅如此 - 但使用名称"list"列表是非常模糊的,我怀疑它甚至可以在任何实际代码中远程使用.


还有,为什么你应该有几个原因不是 曾经阴影内置.下面是一些比较严重的问题:

  • 兼容性,代码不适用于其他模块.
  • 混乱,任何阅读你的代码的人都不会理解发生了什么.
  • 情况,许多内置插件使用其他内置插件,更改一个可能会在代码的其他方面产生意外结果.

  • 这没有回答这个问题 - OP明白他所做的是错的,但他正在使用shell并且想要解决这个错误. (7认同)