この記事を書いた人について
- 仕事ではPython以外を使っている
- Pythonは趣味で使い始めたばかり
ハマったこと
Pythonでrangeからlistを構築する方法を確認したかったので以下のようなコードをコンソールから実行した
sample1.py
>>> list = list(range(5)) # 0から4までのリストを構築
>>> list
[0, 1, 2, 3, 4]
>>> list = list((range(10))) # 0から9までのリストを構築(できない)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
なぜか1回目のrangeからlist構築は成功し、同じことを2回行おうとしたらエラーが出た
原因
1回目で定義したリストの変数名が"list"だったため、2回目に組込型のlistのコンストラクタを呼び出す部分で1回目で定義した変数が呼び出され、型エラーが発生していた
対策
- 組込型と同じ変数名を使用しない
そもそも変数名としてよくない - コンソールを再起動する
それほど複雑なことをしていなければ、変数が初期化されるのでやりなおすのもあり - delで変数を削除する
以下、この方法について紹介
sample2.py
>>> list = list(range(5)) # 0から4までのリストを構築
>>> list
[0, 1, 2, 3, 4]
>>> del list # 変数"list"を削除
>>> list # "list"が組込型のlistとして扱われている
<class 'list'>
>>> list = list((range(10))) # 0から9までのリストを構築(エラーにならない)
>>> list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2回目のリストの構築がエラーにならず成功していることがわかる
参考資料