前々から感じてたことなんだけど。
Python にいくつか「鬼門」があるとして、一番は Unicode で決まりとしても、2番3番てなんだろうか、と。
個人的には「ローカル変数のスコープ」が一番いやらしいと思ってるんだけど、それ以外だとやっぱしインポートの振る舞いなのかな、と思う。これに学習初期でハマることはまずなくて、随分経ってから突然牙を剥いて、ようやく事の重大さに気付く、のよね。
今「What’s New」翻訳してて、まともな絶対インポートが導入されたのが 2.5 (部分的に 2.4 から)であったことを知った。それ以前は「クリーンな方法で」名前衝突を避ける術がなかったんだな…。
翻訳が一段落してからにするかどうするか迷うとこだけど、「たかがインポート」ごときのはなしを、歴史も踏まえてまとめてみたくなってきた。インターネットで検索してみてもこの注意点に言及してくれてる記事は少し見つかるんだけれど、ワタシの今の場合、関わった翻訳のリンクも適切に散りばめた、面白いものが書けそうな気がするので。
インポートの関係で、公式ドキュメント内で言及している箇所で重要なのは以下です:
- 2.7 の FAQ “What are the “best practices” for using import in a module?” 原文 – 原文が 2.7.2 時点から修正されていて、今みえている和訳がこれにまだ追従していない。Transifex 化したほうでは修正済みなので、そのうち見えるようになるはず。
- 3.4 の FAQ 「モジュールで import を使う際の「ベストプラクティス」は何ですか?」
- What’s New in Python 2.5 の “PEP 328: Absolute and Relative Imports” – 翻訳作業中です。ちと待っといてな。
- 「Python 2 から Python 3 への移植」の互換性オプション – 解説はないが
from __future__ import absolute_import
を無条件に推奨している。
これら見えるものだけ以外の端々は、「頭痛くなってくる」ようなものだったりすんのよね。前に Cython に絡めて似た話をした通りで、わかってるのに雑に作業してると無意識に循環に陥ることがあって、これに陥るとさ、「禿げしく大改造」を強いられる(というか多数のファイルをまたいだ組み替え作業)んで、精神衰弱がぱねぇのな。てなことも、書ければいいかな、なんて思う。