十分な大きさの python ファイルで作業しているときに、誤ってグローバル スコープで関数を再定義してしまいました。そのような場合、Python インタープリターが警告してくれるとありがたいです。
次のコード (バージョン 1) から始めるとします。
#!/usr/bin/env python
... lots of code ...
def foo(version):
if version == 1:
return "Correct"
return "Oops!"
... lots more code ...
print foo(1)
正しく動作するもの:
Correct
そして、いくつかの変更を加えて、それをバージョン 2 と呼びます。foo 関数を書き直しましたが、古い関数が存在していたことに気付かないか、削除するのを忘れています。あなたはこれで終わります:
#!/usr/bin/env python
def foo(version):
if version == 2:
return "Correct"
return "Oops!"
... lots of code ...
def foo(version):
if version == 1:
return "Correct"
return "Oops!"
... lots more code ...
print foo(2)
これはうまく機能しません:
Oops!
私はPythonが次のようなコードを許可していることを知っています:
def monkey():
return "patching"
monkey = "is"
def monkey():
return {"really": "fun"}
しかし、そのように「def」を使用するのは悪い習慣のようです。
この種の動作を取得する方法はありますか:
#!/usr/bin/env python --def-strict
def foo():
pass
def foo():
pass
結果:
Traceback (most recent call last):
File ..., line 3, in <module>
NameError: name 'foo' is already defined