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 に答える