pytho****@googl*****
pytho****@googl*****
2011年 2月 17日 (木) 12:37:20 JST
Revision: 556f28b1a5 Author: cocoa****@gmail***** Date: Wed Feb 16 19:34:45 2011 Log: tutorial/modules.rst 差分翻訳 http://code.google.com/p/python-doc-ja/source/detail?r=556f28b1a5 Modified: /tutorial/modules.rst ======================================= --- /tutorial/modules.rst Sat Nov 27 11:01:10 2010 +++ /tutorial/modules.rst Wed Feb 16 19:34:45 2011 @@ -114,6 +114,8 @@ 上の操作は、アンダースコア (``_``) で開始する名前以外の全ての名前を import します。 +一般的には、モジュールやパッケージから ``*`` を import するというやり方には 賛同できません。というのは、この操作を行うとしばしば可読性に +乏しいコードになるからです。しかし、対話セッションでキータイプの量を減らす ために使うのは構わないでしょう。 .. note:: @@ -472,15 +474,10 @@ それでは、ユーザが ``from sound.effects import *`` と書いたら、どうなるので しょうか? 理想的には、何らかの方法でファイルシステムが調べられ、そのパッケージにどん なサブモジュールがあるかを調べ上げ、全てを import -する、という処理を望むことでしょう。残念ながら、この操作は Windows のプラッ トフォームではうまく動作しません。 -これらのプラットフォームでは、ファイルシステムはファイル名の大小文字の区別 について正しい情報をもっているとは限らないからです! -こうしたプラットフォームでは、ファイル :file:`ECHO.PY` をモジュー ル :mod:`echo` として import -すべきか、 :mod:`Echo` とすべきかが分かる確かな方法がないからです (例え ば、 Windows 95 は -すべてのファイル名の最初の文字を大文字にして表示するという困った慣習があり ます)。また、DOS の 8+3 のファイル名制限のせいで、 -長いモジュール名に関して別の奇妙な問題が追加されています。 +する、という処理を望むことでしょう。これには長い時間がかかってしまうことも ありますし、あるサブモジュールを import することで、そのモジュールが明示的 に import されたときのみ発生して欲しい副作用が起きてしまうかもしれません。 -唯一の解決策は、パッケージの作者にパッケージの索引を明示的に提供させるとい うものです。 import 文は次の規約を使います: パッケージの +唯一の解決策は、パッケージの作者にパッケージの索引を明示的に提供させるとい うものです。 :keyword:`import` 文は次の規約を使います: パッケージの :file:`__init__.py` コードに ``__all__`` という名前のリストが定義されていれ ば、 ``from package import *`` が現れたときに import するリストとして使います。新たなパッケージがリ リースされるときに リストを最新の状態に更新するのはパッケージの作者の責任となります。自分のパ ッケージから \* を import するという使い方に同意できなければ、 @@ -501,7 +498,7 @@ (場合によっては初期化コード :file:`__init__.py` を実行して) パッケー ジ :mod:`sound.effects` が import されたということを確認し、そのパッケージで定義されている名前を全て import するだけです。 import される名前には、 :file:`__init__.py` で定義された名前 (と、明示的にロード されたサブモジュール) が含まれます。 -パッケージのサブモジュールで、以前の import 文で明示的にロードされたものも 含みます。以下のコードを考えてください: +パッケージのサブモジュールで、以前の :keyword:`import` 文で明示的にロードさ れたものも含みます。以下のコードを考えてください: :: @@ -510,14 +507,15 @@ import sound.effects.surround from sound.effects import * -上の例では、echo と surround モジュールが現在の名前空間に import されます。 これらのモジュールは ``from...import`` 文が +上の例では、 :mod:`echo` と :mod:`surround` モジュールが現在の名前空間に import されます。これらのモジュールは ``from...import`` 文が 実行された際に :mod:`sound.effects` 内で定義されているからです (この機構は ``__all__`` が定義されているときにも働きます)。 - -一般的には、モジュールやパッケージから ``*`` を import するというやり方には 賛同できません。というのは、この操作を行うとしばしば可読性に -乏しいコードになるからです。しかし、対話セッションでキータイプの量を減らす ために使うのは構わないでしょう。それに、特定のモジュールでは、 -特定のパターンに従った名前のみを公開 (export) するように設計されています。 - +.. memo + 原文での L.488--L.490 -> L.l06--L.108 の移動に従い, 訳文も移動. + +特定のモジュールでは ``import *`` を使ったときに、 +特定のパターンに従った名前のみを公開 (export) するように設計されてはいます が、 +それでもやはり製品のコードでは良いことではないと考えます。 ``from package import specific_submodule`` を使っても何も問題は ないことに留意してください!実際この表記法は、import を行うモジュールが他の パッケージかと同じ名前を持つサブモジュールを使わなければ @@ -574,5 +572,5 @@ .. rubric:: Footnotes -.. [#] 実際には、関数定義も '実行' される '文' です; モジュールを実行する と、関数名はモジュールのグローバルなシンボルテーブルに入力されます。 - +.. [#] 実際には、関数定義も '実行' される '文' です; モジュールレベルの関数 を実行すると、関数名はモジュールのグローバルなシンボルテーブルに入ります。 +