pytho****@googl*****
pytho****@googl*****
2011年 11月 9日 (水) 17:43:35 JST
3 new revisions: Revision: dd7cf7b649ab Author: Arihiro TAKASE <hinac****@gmail*****> Date: Tue Nov 8 23:46:24 2011 Log: 差分翻訳 2.7.2: reference/compound_stmts http://code.google.com/p/python-doc-ja/source/detail?r=dd7cf7b649ab Revision: 669285df7c19 Author: Arihiro TAKASE <hinac****@gmail*****> Date: Tue Nov 8 23:59:41 2011 Log: merge http://code.google.com/p/python-doc-ja/source/detail?r=669285df7c19 Revision: 6db42d6a5f34 Author: Arihiro TAKASE <hinac****@gmail*****> Date: Wed Nov 9 00:00:19 2011 Log: merge http://code.google.com/p/python-doc-ja/source/detail?r=6db42d6a5f34 ============================================================================== Revision: dd7cf7b649ab Author: Arihiro TAKASE <hinac****@gmail*****> Date: Tue Nov 8 23:46:24 2011 Log: 差分翻訳 2.7.2: reference/compound_stmts http://code.google.com/p/python-doc-ja/source/detail?r=dd7cf7b649ab Modified: /reference/compound_stmts.rst ======================================= --- /reference/compound_stmts.rst Sat Oct 8 02:59:52 2011 +++ /reference/compound_stmts.rst Tue Nov 8 23:46:24 2011 @@ -10,7 +10,7 @@ 一般的には、複合文は複数行にまたがって書かれますが、全部の文を一行に連ねた 単純な書き方もあります。 :keyword:`if` 、 :keyword:`while` 、および :keyword:`for` 文は、 -伝統的な制御フロー構成を実現します。 :keyword:`try` は例外処理かつ/または一 連の文に対するクリーンアップコードを指定します。 +伝統的な制御フロー構成を実現します。 :keyword:`try` は例外処理および/または 一連の文に対するクリーンアップコードを指定します。 関数とクラス定義もまた、構文法的には複合文です。 複合文は、一つまたはそれ以上の '節 (clause)' からなります。一つの節は、ヘッ ダと 'スイート (suite)' からなります。 @@ -80,8 +80,9 @@ : ["else" ":" `suite`] :keyword:`if` 文は、式を一つ一つ評価してゆき、真になるまで続けて、真になっ た節のスイートだけを選択します (真: true と偽: false -の定義については、 :ref:`booleans` 節を参照してください); 次に、選択したス イートを実行します (または、 :keyword:`if` -文の他の部分を実行したり、評価したりします) 全ての式が偽になった場 合、 :keyword:`else` 節があれば、そのスイートが実行されます。 +の定義については、 :ref:`booleans` 節を参照してください); 次に、選択したス イートを実行します +(そして、:keyword:`if` 文の他の部分は、実行や評価をされません)。 +全ての式が偽になった場合、 :keyword:`else` 節があれば、そのスイートが実行さ れます。 .. _while: @@ -182,7 +183,7 @@ keyword: except keyword: finally -:keyword:`try` 文は、ひとまとめの文に対して、例外処理かつ/またはクリーンア ップコードを指定します: +:keyword:`try` 文は、ひとまとめの文に対して、例外処理および/またはクリーン アップコードを指定します: .. productionlist:: try_stmt: try1_stmt | try2_stmt @@ -262,11 +263,12 @@ :keyword:`try`...\ :keyword:`finally` 文の :keyword:`try` スイート内で :keyword:`return` 、 :keyword:`break` 、または :keyword:`continue` 文が 実行された場合、 :keyword:`finally` 節も '抜け出る途中に (on the way out)' 実行されます。 +:keyword:`finally` 節での :keyword:`continue` 文の使用は不正です。 +(理由は現在の実装上の問題です -- この制限は将来解消される +かもしれません)。 .. % XXX ここは上段落と全く同じ内容で、冗長です。 -.. % \keyword{finally} 節での \keyword{continue} 文の使用は不正となります -.. % (理由は現在の実装上の問題にあります -- この制限は将来解消される -.. % かもしれません)。\keyword{finally} 節の実行中は、例外情報を取得 +.. % \keyword{finally} 節の実行中は、例外情報を取得 .. % することはできません。 例外に関するその他の情報は :ref:`exceptions` 節にあります。ま た、 :keyword:`raise` @@ -288,38 +290,61 @@ :keyword:`except`...\ :keyword:`finally` 利用パターンをカプセル化して便利に 再利用することができます。 .. productionlist:: - with_stmt: "with" `expression` ["as" `target`] ":" `suite` - -:keyword:`with` 文の実行は以下のように進行します: - -#. コンテキスト式を評価し、コンテキストマネージャを取得します。 + with_stmt: "with" with_item ("," with_item)* ":" `suite` + with_item: `expression` ["as" `target`] + +一つの "要素" を持つ :keyword:`with` 文の実行は以下のように進行します: + +#. コンテキスト式 (:token:`with_item` で与えられた式) を評価することで、 + コンテキストマネージャを取得します。 + +#. コンテキストマネージャの :meth:`__enter__` メソッドが、 + 後で使うためにロードされます。 #. コンテキストマネージャの :meth:`__enter__` メソッドが呼ばれます。 -#. ターゲットが :keyword:`with` 文に含まれる場合、 :meth:`__enter__` からの 戻り値がこれに代入されます。 +#. :keyword:`with` 文に ターゲットが含まれていたら、 + それに :meth:`__enter__` からの戻り値が代入されます。 .. note:: :keyword:`with` 文は、 :meth:`__enter__` メソッドがエラーなく終了した 場合には :meth:`__exit__` が常に呼ばれることを保証します。ですので、もしエラーがターゲットリス トへの代入中にエラーが発生した場合には、これは そのスイートの中で発生したエラーと同じように扱われます。 + 以下のステップ 6 を参照してください。 #. スイートが実行されます。 #. コンテキストマネージャの :meth:`__exit__` メソッドが呼ばれます。もし例外 がスイートを終了させる場合、その型、値、そして トレースバックが :meth:`__exit__` へ引数として渡されます。そうでなけれ ば、 3 つの :const:`None` 引数が与えられます。 - スイートが例外により終了した場合、 :meth:`__exit__` メソッドからの戻り値 は偽(false)であり、例外が - 再送出されます。この戻り値が真(true)ならば例外は抑制され、そして実行 は :keyword:`with` 文に続く分へ継続されます。 + スイートが例外により終了され、 :meth:`__exit__` メソッドからの + 戻り値が偽(false)ならば、例外が再送出されます。この戻り値が真(true) + ならば例外は抑制され、実行は :keyword:`with` 文の次の文から続きます。 もしそのスイートが例外でない何らかの理由で終了した場合、そ の :meth:`__exit__` からの戻り値は無視されて、実行は 発生した終了の種類に応じた通常の位置から継続します。 +複数の要素があるとき、コンテキストマネージャは複数の :keyword:`with` 文が +ネストされたかのように進行します:: + + with A() as a, B() as b: + suite + +は、以下と同等です:: + + with A() as a: + with B() as b: + suite + .. note:: Python 2.5 では、 :keyword:`with` 文は ``with_statement`` 機能が有効にさ れた場合にだけ利用できます。 Python 2.6 では常に利用できます。 +.. versionchanged:: 2.7 + 複数のコンテキスト式をサポートしました。 + .. seealso:: :pep:`0343` - The "with" statement @@ -368,10 +393,12 @@ .. index:: statement: @ -関数定義は一つまたは複数のデコレータ(:term:`decorator`)式でラップできます。 -デコレータ式は関数を定義する時点で、関数定義の入っているスコープにおいて評 価されます。デコレータは呼び出し可能オブジェクトを返さねば -なりません。また、デコレータのとれる引数は関数オブジェクトひとつだけです。 デコレータの返す値は関数オブジェクトではなく、関数名にバインドされます。 -複数のデコレータを入れ子にして適用してもかまいません。例えば、以下のような コード:: +関数定義は一つ以上のデコレータ (:term:`decorator`) 式でラップできます。 +デコレータ式は関数を定義するとき、関数定義の入っているスコープで評価されま す。 +その結果は、関数オブジェクトを唯一の引数にとる呼び出し可能オブジェクトで +なければなりません。関数オブジェクトの代わりに、返された値が関数名に +束縛されます。複数のデコレータはネストして適用されます。 +例えば、以下のようなコード:: @f1(arg) @f2 @@ -462,13 +489,8 @@ クラス変数は、インスタンス変数のデフォルト値として使えますが、変更可能な値 をそこに使うと予期せぬ結果につながります。 新スタイルクラス(:term:`new-style class`)では、デスクリプタを使ってインスタ ンス変数の振舞いを変更できます。 -.. Class definitions, like function definitions, may be wrapped by one or more - :term:`decorator` expressions. The evaluation rules for the decorator - expressions are the same as for functions. The result must be a class object, - which is then bound to the class name. - クラス定義は、関数定義と同じように、1つ以上のデコレータ (:term:`decorator`)式でラップすることができます。 -デコレータ式の評価は関数と同じです。結果はクラスオブジェクトでなければなら ず、 +デコレータ式の評価規則は関数と同じです。結果はクラスオブジェクトでなければ ならず、 それがクラス名に束縛されます。 .. rubric:: 脚注 ============================================================================== Revision: 669285df7c19 Author: Arihiro TAKASE <hinac****@gmail*****> Date: Tue Nov 8 23:59:41 2011 Log: merge http://code.google.com/p/python-doc-ja/source/detail?r=669285df7c19 ============================================================================== Revision: 6db42d6a5f34 Author: Arihiro TAKASE <hinac****@gmail*****> Date: Wed Nov 9 00:00:19 2011 Log: merge http://code.google.com/p/python-doc-ja/source/detail?r=6db42d6a5f34