2

我有一个有趣(可能很愚蠢)的想法:如果我使用内置函数名作为变量来分配某个对象(比如整数)会发生什么。这是我尝试过的:

 >>> a = [1,2,3,4]
 >>> len(a)
 4
 >>> len = 1
 >>> len(a)
 Traceback (most recent call last):
   File "<stdin>", line 1, in ?
 TypeError: 'int' object is not callable

似乎python不会以不同的方式对待函数和变量名。在不重新启动 python 解释器的情况下,有没有办法分配len回函数?还是撤消分配len = 1

4

2 回答 2

18

使用del len

>>> a=[1,2,3,4]
>>> len=15
>>> len(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> del len
>>> len(a)
4

来自docs.python.org

删除名称会从本地或全局名称空间中删除该名称的绑定,具体取决于该名称是否出现在同一代码块中的全局语句中。如果名称未绑定,则会引发 NameError 异常

于 2013-01-03T23:04:13.593 回答
12

从技术上讲,您可以从__builtin__

from __builtin__ import len

但是请不要命名len,这会让明智的程序员生气。

好的,首先不要在内置函数之后命名你的变量,其次,如果你想尊重其他函数,那么尊重命名空间

import time
time.asctime()
asctime = 4253
time.asctime() # Notice that asctime here is unaffected as its inside the time module(s) namespace
于 2013-01-03T22:59:56.860 回答