問題タブ [contextmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1148 参照

python - ジェネレーター内でコンテキストマネージャーの __exit__ がトリガーされるのはいつですか?

ジェネレーターをコルーチンとして使ってタスクスケジューラーのようなものを作っています。以下のコードでは、print cleanup決定論的に実行する必要があります。

オブジェクトをガベージ コレクターに解放すると、コンテキスト マネージャーが終了するようです。しかし、私は GC のタイミングに頼るよりもよく知っています。それは本当に GC が呼び出しているの__exit__か、それとも別のメカニズムなのか?

どうすれば厳密に強制できprint 'cleanup'ますか?

0 投票する
1 に答える
444 参照

python - Pythonの「with」ステートメント、「as」セクションが単一のオブジェクトでなければならない理由

Python では次のように言えます。

しかし、次のwithようなステートメント:

動作しません

次のものが必要です。

最初の形式を許可することに関する実際的な問題はわかりません。これは、実装または論理を意味し、パーサーはコンマに問題があるべきではなく (あいまいではありません)、論理的な理由がわかりません。

http://docs.python.org/release/2.5/whatsnew/pep-343.html

http://www.python.org/dev/peps/pep-0343/は、これが単なる構文糖であることを示唆しています

0 投票する
2 に答える
909 参照

python - Python コンテキスト マネージャーを組み立てる: パズル

Python コンテキスト マネージャーが実行できるすべてのことを適切な場所に配置する方法に困惑しています。

私が理解しているように、コンテキストマネージャーを構築する可能性のある要素には次のものがあります。

  • A:いつも起こること
  • B: C に必要な準備
  • C: コンテキストで使用されるオブジェクト X を作成して確立する
  • D: コンテキストの開始前に X の確立に成功したことを使用して、いくつかのことを行います
  • E: X をコンテキストに戻します ( で使用するためas)
  • F: コンテキストの最後ですべて問題がなければ、X で終了します
  • G: コンテキストに入る前に、C と B での失敗の結果に対処する
  • H: 状況に応じて失敗の結果に対処する

これらの各要素がコンテキストマネージャー関数のどこにあるのかはおおまかにわかると思いますが、それらをクラスに配置する方法については完全に途方に暮れています。

これらの要素のそれぞれが関数と(特に)クラスの両方に含まれていることを示すコンテキストマネージャー関数とクラスのテンプレートはありますか? ここや他の場所で多くの例を調べましたが、包括的なものはなく、実際のコードを使用しているものも多く、上記の各構成要素に常にマップできるとは限りません。


関数を介して実装された場合のコンテキストマネージャーの動作を基本的に理解していると思います。

たとえば、正常に開いて閉じたときに何かを書き込む必要があるが、問題が発生した場合はクリーンアップする必要があるファイルを開くには、次のように記述できます。

しかし、これが正しいかどうかはわかりません。また、クラスの使用__enter()____exit()__クラス内での使用にどのように対応するのか混乱しています。それは(概略的に)ですか:

0 投票する
0 に答える
69 参照

python - Python コンテキスト マネージャーを使用してオブジェクトを「借用」する方法

withオブジェクトを貸与し、ステートメントのスコープが終了したときにオブジェクトを取り戻す、制御された種類の「ライブラリ」として機能するPythonコンテキストマネージャーを作成したいと考えています。

疑似コードでは、次のようなことを考えていました。