問題タブ [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 投票する
3 に答える
7706 参照

python - with ステートメントから興味深い値を返すにはどうすればよいですか?

グローバルを使用してコンテキストマネージャから興味深い値を取得するよりも良い方法はありますか?

その他の可能性:

  • シングルトン

    一種のグローバル...

  • コンテキストマネージャへの引数としてのタプル

    関数をより問題に特化したものにする / 再利用性を低くする

  • コンテキストマネージャへの引数として特定の属性を保持するインスタンス

    タプルと同じ問題だが、より読みやすい

  • 値を保持しているコンテキストマネージャーの最後で例外を発生させます。

    本当に悪い考え

0 投票する
4 に答える
2075 参照

python - Python でスタック/コンテキストに変数を配置する方法

本質的に、ブロックが終了するまで、スタック上のその部分の下のすべての呼び出しによって到達可能な変数をスタックに配置したいと考えています。Java では、メソッドからアクセスできるサポート メソッドを備えた静的スレッド ローカルを使用してこれを解決します。

典型的な例: リクエストを受け取り、データベース接続を開きます。リクエストが完了するまで、すべてのコードでこのデータベース接続を使用する必要があります。要求を終了して閉じた後、データベース接続を閉じます。

これが必要なのは、レポートジェネレーターです。各レポートは複数の部分で構成され、各部分は異なる計算に依存する場合があり、異なる部分が同じ計算に部分的に依存する場合もあります。重い計算を繰り返したくないので、それらをキャッシュする必要があります。私の考えは、メソッドをキャッシュ デコレータで装飾することです。キャッシュは、メソッド名とモジュールに基づいて id を作成し、その引数は、これがスタック変数で既に計算されているかどうかを調べ、そうでない場合はメソッドを実行します。

現在の実装を示すことで明確にしようと思います。私がやりたいのは、計算を実装するためのコードを単純化することです。

まず、MathContext と呼ぶ中央キャッシュ アクセス オブジェクトがあります。

fn 引数は、コンテキストが関連して作成されるファイル名であり、そこからデータを読み取って計算することができます。

次に、Calculation クラスがあります。

そして、これはばかげたフィボナッチの例です。メソッドは実際には再帰的ではなく、代わりに大量のデータセットで機能しますが、他の計算にどのように依存するかを示すために機能します。

代わりにフィボナッチにしたいのは、装飾されたメソッドです。

math_context の例では、math_context が範囲外になると、キャッシュされた値もすべて範囲外になります。デコレータにも同じことが必要です。すなわち。ポイント X では、@cache によってキャッシュされたものはすべて参照解除されて gced されます。

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

python - with:ブロックで定義された関数の検索

これがリチャードジョーンズのブログからのいくつかのコードです:

私の質問は、彼はどうやってこれをしたのかということです。コンテキストマネージャーは、withブロック内のスコープにどのようにアクセスできますか?これを理解しようとするための基本的なテンプレートは次のとおりです。

0 投票する
7 に答える
354648 参照

python - Pythonの「__enter__」と「__exit__」の説明

私はこれを誰かのコードで見ました。どういう意味ですか?


0 投票する
5 に答える
90702 参照

python - 複数のコンテキストマネージャーで「with」ブロックを作成しますか?

コンテキストマネージャを介して取得する3つのオブジェクト、たとえばAロック、db接続、およびipソケットがあるとします。次の方法で取得できます。

しかし、1つのブロックでそれを行う方法はありますか?何かのようなもの

さらに、コンテキストマネージャーを持つオブジェクトの長さが不明な配列が与えられた場合、どういうわけか次のことを行うことができますか?

答えが「いいえ」の場合、そのような機能の必要性は悪いデザインを意味するのでしょうか、それとも私はそれを一言で提案する必要がありますか?:-P

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

python - Pythonのデコレータは、関数で関数を呼び出すのとまったく同じですか?

やっていると思った

とまったく同じです

しかし、私はcontextlib.contextmanagerを使用するこのコードを持っていました:

これは機能し、1 3 2

そして私がそれをに変えようとしたとき

私は得るAttributeError: 'function' object has no attribute '__exit__'

私は何が欠けていますか?特にcontextlib.contextmanagerにいくつかの黒魔術がありますか、それともデコレータが一般的にどのように機能するかを誤解していますか?

0 投票する
4 に答える
232 参照

python - Python でのスレッド化の簡素化

スレッド化されたコードを簡単にする方法を探しています。

私のコードには、次のようなことをする場所がたくさんあります。

つまり、毎回異なるパラメーターに対してスレッドで同じ関数を実行します。

もちろん、これは実際のコードの単純化されたバージョンであり、通常、ループ内のコードforは 10 ~ 20 行の長さであり、上記の例のように 1 つの補助関数を使用して単純化することはできませんmyFunction(そうであった場合、スレッドプールを使用できたはずです)。

また、このシナリオは私のコードでは非常に一般的であるため、冗長だと思われる行がたくさんあります。この定型コードをすべて処理する必要がなく、代わりに次のようなことができれば、非常に役立ちます。

つまり、どういうわけかthreaded()その中のすべてのコード行を取得し、別のスレッドで実行します。

コンテキストマネージャーはそのような状況で使用することは想定されておらず、おそらく悪い考えであり、醜いハックが必要になることを知っていますが、それでも-それは可能で、どのように行うことができますか?

0 投票する
5 に答える
12918 参照

python - ステートメントマネージャーとコンテキストマネージャーでPythonを理解する

私はそのwith声明を理解しようとしています。try/exceptブロックを置き換えることになっていることを理解しています。

今、私がこのようなことをしたとしましょう:

これをコンテキストマネージャーに置き換えるにはどうすればよいですか?

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

python - @contextmanager デコレータとデコレータを混在させるにはどうすればよいですか?

ここに私が取り組んでいるコードがあります:

問題は、@with_report_statusが期待するように生成されないこと@contextmanagerです。@contextmanagerただし、値自体ではなくジェネレーターオブジェクト (と思います!) を返すため、逆にラップすることもできません。

どうすれば@contextmanagerデコレータをうまく使うことができますか?

0 投票する
3 に答える
5030 参照

python - Python の `with` ステートメントのターゲットが予期せず None です

私は何かを理解していないようです---pythonwithステートメント。

このクラスを考えてみましょう:

今、withのようにそれを使用する場合

<test instance at memore blah> のような出力が期待できます。しかし、私はNoneを取得します。

ここで何か問題がありますか?どんな提案も役に立ちます。

(私は Python 2.6.6 を使用しています。)

編集:

ドキュメントを教えてくれたephementに感謝し ます。__enter__メソッドは次のように読む必要があります