2017-06-04 5 views
2

私はのPython 3.6.1ドキュメント、Jupyterノート(Pythonのバージョン3.6.1)への章9.10から次の例をコピー:公式ドキュメントは、それがを印刷するだろうと述べていますが、私は、公式のPythonチュートリアル(9.10章)で誤った例がありますか?

xvec = [10, 20, 30] 

yvec = [7, 5, 3] 

sum(x*y for x,y in zip(xvec, yvec))   # dot product 

ノートブックで、次のエラーを得た:

----> 4 sum(x*y for x,y in zip(xvec, yvec)) 
TypeError: 'int' object is not callable 

これは、上の質問だけで、間違いなく「int型のオブジェクトを呼び出すことはできません」が、よりPython用福音であると考えられるもので触知エラーではありません。

+2

が重複する可能性を'リスト上でsum関数を使用しているときにオブジェクトを呼び出しできません](https://stackoverflow.com/questions/2460087/int-object-is-not-callable-when-using-the-sum-function-on-a - リスト) –

+0

私のために働くスクリプト –

+0

はい。実際には、最後の行を次のように変更した場合: 'value = sum(xはx、yはzip(xvec、yvec))#ドットプロダクト' 'print(value)'それはjupyterノートブック自体の内部で動作します –

答えて

3

を誤って使用すると、上書きされている場合zip()または/およびsum()となり、現在のコードが機能しなくなります。あなたはこの例のように、delを使用して、既定の機能を復元することができます。

>>> zip = [1] 
>>> zip 
[1] 
>>> del zip 
>>> zip 
<function zip> 

だから、あなたは試すことができます:

>>> del zip 
>>> del sum 
>>> xvec = [10, 20, 30] 
>>> yvec = [7, 5, 3] 
>>> sum(x*y for x,y in zip(xvec, yvec)) 

そして、それが出力されます:[ 'int型の

260 
2

コードは限り、あなたはzipsumを上書きしていなかったように動作するはずです:

>>> xvec = [10, 20, 30] 
>>> yvec = [7, 5, 3] 
>>> sum(x*y for x,y in zip(xvec, yvec)) 
260 

あなたがそれらを上書きしていないことを確認してください:

>>> sum = 0 # <--- overwrite 
>>> sum(x*y for x,y in zip(xvec, yvec)) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object is not callable 
関連する問題