範囲で合計関数を使用するとエラーが発生する理由を理解しようとしています。
これがコードです:
data1 = range(0, 1000, 3)
data2 = range(0, 1000, 5)
data3 = list(set(data1 + data2)) # makes new list without duplicates
total = sum(data3) # calculate sum of data3 list's elements
print total
そしてここにエラーがあります:
line 8, in <module> total2 = sum(data3)
TypeError: 'int' object is not callable
私はこのエラーの説明を見つけました:
Python通常、「呼び出し可能」は関数です。メッセージは、数値(>「int」)が関数(「呼び出し可能」)であるかのように処理していることを意味するため、= Pythonは何をすべきかわからないので、>停止します。
Sum()がリストで使用できることも読んだので、ここで何が問題になっているのだろうと思いますか?
私はIDLEモジュールで試してみましたが、うまくいきました。ただし、pythonインタプリタでは機能しません。それがどのように行われるかについてのアイデアはありますか?
「sum」関数を整数データ型に再定義した可能性があります。したがって、整数は範囲を渡すことができるものではないことを正しく伝えています。
これを修正するには、インタプリタを再起動してください。
Python 2.7.3 (default, Apr 20 2012, 22:44:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> data1 = range(0, 1000, 3)
>>> data2 = range(0, 1000, 5)
>>> data3 = list(set(data1 + data2)) # makes new list without duplicates
>>> total = sum(data3) # calculate sum of data3 list's elements
>>> print total
233168
sum
ビルトインをシャドウすると、表示されているエラーが発生する可能性があります
>>> sum = 0
>>> total = sum(data3) # calculate sum of data3 list's elements
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
また、sum
はset
で正常に機能することに注意してください。list
に変換する必要はありません。
これは、コードのどこかに、次のようなものがあることを意味します。
sum = 0
組み込み和(これはis呼び出し可能)をint(そうではない)でシャドウします。
インタプリタでは、再起動してそのような問題を修正するのが簡単です。インタープリターを再始動したくない場合は、それを修正する別の方法があります。
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> l = [1,2,3]
>>> sum(l)
6
>>> sum = 0 # oops! shadowed a builtin!
>>> sum(l)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> import sys
>>> sum = sys.modules['__builtin__'].sum # -- fixing sum
>>> sum(l)
6
これは、dict
やlist
などの他の組み込み関数に値を割り当てた場合にも役立ちます。